Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

本日見かけた酷いコード8

タグ: C++ 酷いコード
// 構造体 ○○byte
struct StaticBuffer
{
	DWORD foo[sizeof(Foo) * FOO_ARRAY_MAX / 4];
	DWORD bar[sizeof(Bar) * BAR_ARRAY_MAX / 4];
	DWORD baz[sizeof(Baz) * BAZ_ARRAY_MAX / 4];
	DWORD hoge[HOGE_BUFFER_SIZE / 4];
	DWORD fuga[FUGA_BUFFER_SIZE / 4];
	// …… 以下、同じようなコードが続く ……
};

酷いコード1の亜種。
原種同様、各メンバは reinterpret_cast で型変換して使用する。
書き方がアクロバティックなだけで動作に支障のない原種とは異なり、こちらは構造体のサイズや *_BUFFFER_SIZE が4の倍数になっていない場合、十分なサイズのメモリ領域を確保できない可能性がある。

元のコードでは、各構造体は4の倍数バイトになるようパディングが入れられていて、その上構造体アライメントが8なので、まず問題にはならない。
念のため、構造体サイズや *_BUFFER_SIZE の値が4の倍数であることを確認する静的表明を入れてみたが、ちゃんとコンパイルできた。
しかし保守性は低い(コード中には4の倍数バイトにすること等の注意書きはない)し、何よりこの構造体や Foo 、 Bar 等のコメントに記されている「○○byte」の値がことごとく間違っているのが、実は一番「酷い」点だったりする。

スポンサーサイト

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://idlysphere.blog66.fc2.com/tb.php/72-7e7fa3ea
この記事にトラックバックする(FC2ブログユーザー)

Appendix

タグ

Blog内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。