C11标准中的匿名结构体与匿名联合体是否被错误描述?
C11标准中匿名结构体与匿名联合体的规范说明
针对C11标准里匿名结构体、匿名联合体的定义是否存在错误描述的问题,咱们直接看C标准的明确规定:
6.7.2.1 第13款:类型说明符为无标记结构体说明符的未命名成员称为匿名结构体;类型说明符为无标记联合体说明符的未命名成员称为匿名联合体。匿名结构体或联合体的成员被视为包含它的结构体或联合体的成员。若包含它的结构体或联合体也是匿名的,此规则递归适用。
这里我再拆解几个关键要点:
- 匿名结构体/联合体的核心判定标准是无标记(没有结构体/联合体标签)+ 未命名(成员本身没有标识符),两个条件必须同时满足
- 最实用的特性是:匿名成员的内部成员可以直接被外层结构体/联合体访问,不需要额外的层级跳转。举个简单的代码例子:
struct UserInfo { int uid; // 匿名结构体 struct { char name[20]; int age; }; }; // 直接访问内部成员,无需额外层级 struct UserInfo user; user.age = 25;
- 如果嵌套的外层容器也是匿名的,这个成员“扁平化”的规则会递归生效——哪怕是多层匿名嵌套,最内层的成员也能直接被最外层的容器访问
内容的提问来源于stack exchange,提问作者Sneftel
相关产品推荐
相关产品推荐

