CまたはC++でパックされていないパッドなしの構造体を作成するための最良の方法は何ですか?目標は次のとおりです。
typedef struct {
char first[3]; //padded to 8 because next type has size 8
double second;
char third;
} SomeStruct;
but do something to make sizeof(SomeStruct) be equal 17;
構造は外部ライブラリ仕様によって定義されます。私には2つの決定があります:
1)
#pragma pack (push, 1)
typedef struct {
char first[3];
char unused[5]; // Manual padding of second field.
double second;
char third;
} SomeStruct;
#pragma pack (pop)
2)宣言の最初のバリアントを使用しますが、データをシリアル化するときは(int)(&((SomeStruct*)0)->third) + sizeof(((SomeStruct*)0)->third)
代わりに書き込みsizeof(SomeStruct)
ます。そのような構造体の配列をシリアル化する必要はないので、そうすることができます。
しかし、どちらも汚いハックです。Cの構造体パディングを削除する標準的なアプローチはありますか?