C联盟的命名标准

时间:2014-11-06 13:05:49

标签: c data-structures struct

我有时会使用联合以不同方式访问相同类型的数据。例如这个联盟:

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]++;

1 个答案:

答案 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将此描述为匿名结构。