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

时间:2011-01-25 12:06:34

标签: c

我刚看到一段代码: -

struct a {
    int mem1;
    char mem2;

    struct {
        int inner_mem1;
        int inner_mem2;
    };
};

我发现代码片段使用内部struct的成员直接使用外部struct的变量名! 例如:

struct a *avar;
....
avar->inner_mem1

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

请让我知道你的想法。

1 个答案:

答案 0 :(得分:7)

这称为“匿名结构”:

  

结构类型的未命名成员   没有标签被称为匿名   结构体;一个未命名的工会成员   没有标签的类型称为   匿名工会。一个成员   匿名结构或联合   被认为是。的成员   包含结构或联合。这个   如果包含,则递归应用   结构或联合也是匿名的。

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