联盟

时间:2016-03-23 10:40:34

标签: c unions

我听说有些编译器允许以下内容:

union {
   int array[2]; // The default type for this union is `int[2]`
   struct {
      int low;
      int high;
   } word;
} foo;


// Normal usage
foo.a[0] = 0; 
foo.low = 0

// What I am looking for
foo[0] = 0;

它是C99 / C11标准的一部分吗?

修改

我想我发现了令我困惑的事情。我们实际上可以在C中声​​明一个没有名字的联合。

struct {
   union {
      int all[2];
      struct {
         int low;
         int high;
      } word;
   } bar;
} foo;

foo.bar.all[0];
foo.bar.low;
foo.bar.high;

在那个特殊情况下,它解决了我的XY问题。

1 个答案:

答案 0 :(得分:2)

不,它不是标准C的一部分。

如果任何编译器支持它(我不确定,因为我从未试图使用这样的功能),它将是特定于供应商的扩展。

在C ++中,联合可能有一个operator[](),但在C中没有等价物。我唯一一次看到它使用,我不得不抵制扼杀程序员的诱惑。