我有时会使用联合以不同方式访问相同类型的数据。例如这个联盟:
typedef union {
int64 word;
int32 array[2];
struct {
field4:16;
field3:16;
field2:28;
field1:4;
} bit;
} my_type;
这个解决方案是否一致正确,是否有我使用的名称(字,数组,位)的标准?
这个解决方案的坏处是我得到的繁琐的符号:
my_type data;
data.bit.field1 = 0xA;
for(i=0;i<sizeof(my_t);i++)
data.array[i]++;
答案 0 :(得分:2)
某些编译器允许在联合中省略struct的名称。您可以尝试按以下方式定义类型:
typedef union {
int64 word;
int32 array[2];
struct {
field4:16;
field3:16;
field2:28;
field1:4;
} bit;
} my_type;
这样可以更容易地访问位成员:
my_type data;
data.field1 = 0xA;
但不幸的是,这依赖于编译器和编译器选项。 编辑: C11标准draft将此描述为匿名结构。