在c语言的结构中定义一个没有标识符的结构var意味着什么



在C语言中,第6行中struct Animal;的含义是什么
它在C89、C99或C11中合法吗?

struct Animal {
char *name;
int age;
};
struct Cat {
struct Animal;   // line 6
int category;
};

谢谢!

这并没有什么意义——事实上这是一种违反约束的行为。

语言语法允许

struct Animal;

代替结构或联合声明中的成员声明。但它违反了语言规则(N1570 6.7.2.1第2段(:

不声明匿名结构或匿名联合应包含一个结构声明符列表。

这是一个"约束",意味着违反它需要进行诊断。(非致命警告信息符合诊断条件。(

如果你写过:

struct Cat {
struct Animal foo;
int category;
};

则CCD_ 2将是一个"声明器"。我上面引用的约束意味着不允许省略它。gcc和clang默认情况下都会对此发出警告("声明不声明任何内容"(,并用-Wpedantic-errors拒绝它。

(匿名结构和并集在C11中被添加到该语言中,并在这里进行了讨论,但您问题中的代码不是匿名结构。(

最新更新