类型定义结构本身的效果是什么?

What is the effect of typedef'ing a struct to itself?

本文关键字:是什么 定义 结构 类型      更新时间:2023-10-16

我看到过在API顶部编写的代码:

typedef struct SYSTEM SYSTEM;

以前未定义类型SYSTEM。有谁知道这是做什么的?编译器在此行之后SYSTEM怎么看?

感谢您的回答!我的问题是以前没有在文件中定义 SYSTEM,所以我不知道它是什么。例如,该行将自行编译,但struct SYSTEM未在任何地方定义。

这实际上只在 C 语言中有效和有用。

在 C 中,您必须键入 struct type ,而 C++ 允许您省略类型的struct部分,只写type

typedef struct type type允许您在 C 中使用 type,而不必在结构名称前使用 struct 关键字。

不过,一些C程序员认为这种做法很糟糕,并且更喜欢编写struct type。只是想把它放在那里。


您没有收到任何错误的原因是,该行充当可能存在也可能不存在的struct SYSTEM的前向声明。typedef所做的只是告诉编译器,当你说X时,你的意思是Y

它允许您在 C 中使用名称 SYSTEM 而不是使用 struct SYSTEM 。该typedef创建了一个同义词SYSTEM struct SYSTEM

在您的情况下,由于未声明struct SYSTEM,声明还会将struct SYSTEM声明为不完整的类型,如以下声明所示:struct SYSTEM;

然后,可以在另一个翻译单元中声明完整的对象类型struct SYSTEM