C联盟分配

时间:2017-11-22 08:52:48

标签: c unions

我有一个联合代表一些所有uint32类型但具有不同位域的结构。我可以将其中一个联盟分配给其他联盟:

typedef union foo_u
{
   // raw
   uint32_t foo32;

   // interpretation 1
   struct
   {
      uint16_t a;
      uint16_t b;
   } foo_flavor1;

   //interpretation 2
   struct
   {
      uint32_t a        : 16;
      uint32_t b        : 12;
      uint32_t c        : 4;
   } foo_flavor2;
} foo;
foo a;
foo b;
a.foo32 = 10;
b.foo32 = 30;
b=a;

或者我必须这样做:

b.foo32 = a.foo32; 

1 个答案:

答案 0 :(得分:3)

b = a;

这样做完全没问题。

对于结构和联合,由标准明确定义一个到另一个相同类型,并且保证在赋值之后,它们应该包含完全相同的数据(排除填充,如果存在)。