我有一个带有一些属性的结构:
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
之类的非标准编译器选项的情况下创建这样的嵌套结构?
答案 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;
};