在C语言中,struct Animal;第6行的含义是什么?
在C89或C99或C11中是否合法?
struct Animal {
char *name;
int age;
};
struct Cat {
struct Animal; // line 6
int category;
};
Run Code Online (Sandbox Code Playgroud)
谢谢!
它并不意味着什么 - 事实上它是违反约束的.
语言语法允许
struct Animal;
Run Code Online (Sandbox Code Playgroud)
代替结构或联合声明中的成员声明.但它违反了语言规则(N1570 6.7.2.1第2段):
不声明匿名结构或匿名联合的结构声明应包含struct-declarator-list.
这是一个"约束",这意味着违反它需要诊断.(非致命警告消息有资格作为诊断.)
如果你写了:
struct Cat {
struct Animal foo;
int category;
};
Run Code Online (Sandbox Code Playgroud)
那foo将是一个"声明者".我上面引用的约束意味着你不允许省略它.gcc和clang都默认警告这个("声明不声明任何东西")并拒绝它-Wpedantic-errors.
(在C11中将匿名结构和联合添加到语言中,并在此处讨论,但您的问题中的代码不是匿名结构.)