创建没有-fms-extensions的“嵌套结构”?

时间:2013-01-01 19:31:10

标签: c struct c11

我有一个带有一些属性的结构:

struct a {
    char* id;
    int a;
    int b;
    int c;
}

我也有一个具有相同属性的结构,但没有id

struct b {
    int a;
    int b;
    int c;
}

我知道C11支持匿名结构,所以我可以这样做:

struct a {
    char* id;
    struct {
        int a;
        int b;
        int c;
    }
}

但是,如果我给内部结构一个标签,它就会失败。是否可以在不使用-fms-extensions之类的非标准编译器选项的情况下创建这样的嵌套结构?

1 个答案:

答案 0 :(得分:1)

您可以在C11中为内部结构指定名称或标签或两者(即,不使用任何扩展名)。

没有标签且没有名称,您的内部结构是C11匿名结构:

struct a {
    char* id;
    struct {
        int a;
        int b;
        int c;
    };
 };

如果为内部匿名结构指定名称,则它不再是匿名结构。它是常规的C89 / C99 / C11结构成员,您无法像匿名结构一样直接访问内部结构成员。

如果给内部匿名结构一个标签(但仍然没有名称),它只是一个C89 / C99 / C11结构声明。没有添加成员,struct a的声明与:

相同
struct a {
    char* id;
};