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