我听说有些编译器允许以下内容:
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问题。
答案 0 :(得分:2)
不,它不是标准C的一部分。
如果任何编译器支持它(我不确定,因为我从未试图使用这样的功能),它将是特定于供应商的扩展。
在C ++中,联合可能有一个operator[]()
,但在C中没有等价物。我唯一一次看到它使用,我不得不抵制扼杀程序员的诱惑。