2

我在 API 的顶部看到了这段代码:

typedef struct SYSTEM SYSTEM;

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

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

4

2 回答 2

4

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

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

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

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


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

于 2013-07-07T20:02:40.030 回答
3

它允许您在 C 中使用名称SYSTEM而不是使用struct SYSTEM. typedef创建的同义词SYSTEMstruct SYSTEM

在您struct SYSTEM未声明的情况下,该声明还声明struct SYSTEM为不完整类型,如此声明中:struct SYSTEM;.

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

于 2013-07-07T20:02:01.180 回答