我修改了一些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);
显然,当使用联合的CharData成员时,代码会试图计算出结构中有趣的字节数。我的问题是,编译器警告联合未命名。所以我把它改成
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)可能不会在联合开始时对齐吗?
--编辑:谢谢你的回答。this问题的答案实际上为我提供了所需的答案:指向union对象的指针,经过适当转换,指向其每个成员(或者如果成员是位字段,则指向其所在的单元),反之亦然。。
不管怎样,我应该选择这个问题的一个答案作为接受的答案吗?
最佳答案
你调查过吗?
http://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Type-Attributes.html
也许你可以用这个来确定你需要什么?