在C语言中,第6行中的struct Animal;
是什么意思?
在C89,C99或C11中合法吗?
struct Animal {
char *name;
int age;
};
struct Cat {
struct Animal; // line 6
int category;
};
谢谢!
答案 0 :(得分:5)
这没有什么意义-实际上,这是违反约束的情况。
语言语法允许
struct Animal;
代替结构或联合声明中的成员声明。但这违反了语言规则(N1570 6.7.2.1第2段):
不声明匿名结构或 匿名联合应包含一个struct-declarator-list。
这是一个“约束”,表示违反该约束需要诊断。 (非致命警告消息可以视为诊断。)
如果您写过:
struct Cat {
struct Animal foo;
int category;
};
然后foo
将成为“声明符”。我在上面引用的约束意味着您不能忽略它。 gcc和clang都默认发出警告(“声明不声明任何内容”),并用-Wpedantic-errors
拒绝。
(C11语言中将匿名结构和联合添加到了discussed here中,但您问题中的代码不是匿名结构。)