c struct-embedded union中的成员对齐
我正在修改一些C代码,大致如下:
typedef struct STRUCT_FOO {
ULONG FooInfo;
union {
ULONG LongData;
USHORT ShortData;
UCHAR CharData;
};
} FOO;
...
FOO foo;
ULONG dataLength = offsetof(FOO, CharData) + sizeof(foo.CharData);
显然,当使用union的CharData成员时,代码试图找出struct中有趣字节的数量。我的问题是,编译器警告联盟未命名。所以我改成了
typedef struct STRUCT_FOO {
ULONG FooInfo;
union {
ULONG LongData;
USHORT ShortData;
UCHAR CharData;
} FooData;
} FOO;
但当然我还需要改变最后一行。以下内容总是会产生与原始结果完全相同的结果吗?
ULONG dataLength = offsetof(FOO, FooData) + sizeof(foo.FooData.CharData);
或者是否可能,CharData(或ShortData或LongData)在联合开始时不会对齐?
- 编辑:谢谢你的回答。这个问题的答案实际上为我提供了我需要的答案:指向联合对象的指针,适当转换,指向其每个成员(或者如果成员是位域,则指向它所在的单位),以及反之亦然..
我应该选择这个问题的答案之一作为接受的答案吗?
没有找到相关结果
已邀请:
2 个回复
矾醒忻
? http://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Type-Attributes.html 也许你可以通过使用它来确保你需要的是什么?
浮凰量