联合体的默认类型

Default type for 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 问题。

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

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

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