【发布时间】:2023-03-04 15:39:01
【问题描述】:
我正在研究 C11 草案,它说
没有标签的结构类型的未命名成员称为匿名结构;没有标签的联合类型的未命名成员称为匿名联合。匿名结构或联合的成员被视为包含结构或联合的成员。
所以我构建了以下测试用例
// struct type with no tag
typedef struct {
unsigned char a;
unsigned char b;
// ... Some other members ...
unsigned char w;
} AToW;
union
{
AToW; // <- unnamed member
unsigned char bytes[sizeof(AToW)];
} myUnion;
Clang 和 GCC 都抱怨未命名的成员,说声明没有效果。是我做错了什么,还是他们根本不支持该功能?
【问题讨论】:
-
我不认为这就是匿名结构。注意“标签”这个词。那是结构或联合的 type 标记,如
struct foo { ... } f;- 这里“foo”是标记。 -
@user3477950 是的,
AToW没有标签。 -
值得注意的是,Clang 和 GCC 似乎都允许您将 AToW 用作扩展,以与 Plan9 和 Microsoft 兼容。 gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html#Unnamed-Fields
标签: c struct c11 anonymous-struct