1

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

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

4

1 回答 1

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;
};
于 2013-01-01T19:33:15.080 回答