没有标签名称的另一个结构中的结构是什么意思?

Hem*_*nth 5 c

我刚看到一段代码片段: -

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)

这是合法的,代码编译然而且工作正常!以这种方式使用它的目的是什么?任何具体情况?

请让我知道你的想法.

Jen*_*edt 7

这被称为"匿名结构":

没有标记的结构类型的未命名成员称为匿名结构; 没有标记的联合类型的未命名成员称为匿名联合.匿名结构或联合的成员被视为包含结构或联合的成员.如果包含的结构或联合也是匿名的,则递归应用.

这不是当前C标准C99的一部分,但预计它将成为即将推出的C标准的一部分(上面引用).此外,许多编译器已经支持此功能作为扩展.