我正在修改一些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
问题实际上提供了我需要的答案:
指向联合对象的指针,经过适当转换后,指向它的每个成员(或者如果成员是位域,则指向它所在的单元),反之亦然。
.
无论如何,我应该选择这个问题的答案中的一个作为被接受的答案吗?