我在 API 的顶部看到了这段代码:
typedef struct SYSTEM SYSTEM;
该类型SYSTEM
以前未定义。有谁知道这是做什么的?编译器SYSTEM
在这行之后会怎么想?
感谢您的回答!我的问题是 SYSTEM 之前没有在文件中定义,所以我不知道它是什么。例如,该行将自行编译,但未struct SYSTEM
在任何地方定义。
这实际上只在 C 中有效和有用。
在 C 中,您必须键入struct type
,而 C++ 允许您省略struct
类型的部分而只写type
.
typedef struct type type
允许您type
在 C 中使用,而不必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
然后可以在另一个翻译单元中声明完整的对象类型。