在 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;
该结构由外部库规范定义。我有两个决定:
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 中的结构填充的标准方法?