我刚看到一段代码: -
struct a {
int mem1;
char mem2;
struct {
int inner_mem1;
int inner_mem2;
};
};
我发现代码片段使用内部struct的成员直接使用外部struct的变量名! 例如:
struct a *avar;
....
avar->inner_mem1
这是合法的,代码编译然而且工作正常! 以这种方式使用它的目的是什么? 任何具体情况?
请让我知道你的想法。
答案 0 :(得分:7)
这称为“匿名结构”:
结构类型的未命名成员 没有标签被称为匿名 结构体;一个未命名的工会成员 没有标签的类型称为 匿名工会。一个成员 匿名结构或联合 被认为是。的成员 包含结构或联合。这个 如果包含,则递归应用 结构或联合也是匿名的。
这不是当前C标准C99的一部分,但预计它将成为即将推出的C标准的一部分(上面引用)。此外,许多编译器已经支持此功能作为扩展。