我修改了一些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
也许你可以用这个来确定你需要什么?

10-08 11:25