構造体がコンパイル時にチェックされているかどうかは、整列が整っているかギャップがあるかどうかです。 チェックは追加のテストコードで行うことができますが、私は実際の実装コードに "パックされた"データを入れたくありません。 構造体が整列しているかギャップがあることをC++で確認してください
これはガード含む典型的な例とヘッダーファイル(MyData.h)である:私は1つの可能な解決策を見つけた
#ifndef MYDATA_H_
#define MYDATA_H_
struct uneven
{
int bla_u32;
short bla_u16;
char bla_u8;
/* <-- this gap will be filled in the unpacked version */
};
#endif // MYDATA_H
を - 下記参照。
質問:
構造体
uneven
は時間をコンパイルでそのアンパック対応物と比較バイトの異なる数が含まれているかどうかを確認するためにエレガントな方法はありますか?C(ネームスペースを使用しないで)で動作する解決策がありますか?
追加のテストコードでチェックが行われる可能性はありますか?アサーションをコード内に置くことをコントロールしたいですか? そうでなければ、コンパイル時にチェックしたい新しい構造体の静的なアサーション実装と組み合わせた関数(@Dutowの示唆に似ています)を定義することができます。 – jcxz
"追加のテストコードでチェックが行われる可能性があります"とは、リリース(リリース)コードベースまたは実際の製品の一部ではない追加のcまたはcppファイルでチェック(静的なアサート)または実際のリリースに含まれてはならないもの) –