gpt4 book ai didi

c - 在c语言的结构中定义一个不带标识符的struct var是什么意思?

转载 作者:太空宇宙 更新时间:2023-11-04 00:57:41 24 4
gpt4 key购买 nike

C语言中第6行的struct Animal;是什么意思?
在 C89 或 C99 或 C11 中是否合法?

struct Animal {
char *name;
int age;
};

struct Cat {
struct Animal; // line 6
int category;
};

谢谢!

最佳答案

它没有任何意义——事实上它是一个约束违规。

语言语法允许

struct Animal;

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

A struct-declaration that does not declare an anonymous structure or anonymous union shall contain a struct-declarator-list.

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

如果你写过:

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

那么 foo 将是一个“声明符”。我上面引用的约束意味着你不能省略它。 gcc 和 clang 都默认对此发出警告(“声明不声明任何内容”)并使用 -Wpedantic-errors 拒绝它。

(匿名结构和 union 被添加到 C11 语言中,并且是 discussed here ,但您问题中的代码不是匿名结构。)

关于c - 在c语言的结构中定义一个不带标识符的struct var是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53386410/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com