联合体的默认类型
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 中没有等价物。我唯一一次看到它被使用,我不得不抵制扼杀程序员的诱惑。
我听说有些编译器允许以下内容:
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 中没有等价物。我唯一一次看到它被使用,我不得不抵制扼杀程序员的诱惑。