我已经看到这个代码写在API的顶部:
typedef struct SYSTEM SYSTEM;
类型SYSTEM
之前未定义。有谁知道这是做什么的?编译器在此行之后认为SYSTEM
是什么意思?
感谢您的回答!我的问题是以前没有在文件中定义SYSTEM,所以我不知道它是什么。例如,该行将自行编译,但struct SYSTEM
未在任何地方定义。
答案 0 :(得分:4)
这实际上只在C中有效且有用。
在C中,您必须输入struct type
,而C ++允许您省略该类型的struct
部分,只需编写type
。
typedef struct type type
允许您在C中使用type
,而无需在结构名称前使用struct
关键字。
有些C程序员认为这种做法很糟糕,而且更喜欢写struct type
。只是想把它放在那里。
您没有收到任何错误的原因是因为该行充当struct SYSTEM
的前向声明,可能存在也可能不存在。 typedef
所做的就是告诉编译器,当你说X
时,你的意思是Y
。
答案 1 :(得分:3)
它允许您在C中使用名称SYSTEM
而不是struct SYSTEM
。
typedef
为SYSTEM
创建了同义词struct SYSTEM
。
在您未声明struct SYSTEM
的情况下,声明还将struct SYSTEM
声明为不完整类型,如此声明:struct SYSTEM;
。
然后可以在另一个翻译单元中声明完整的对象类型struct SYSTEM
。