类型定义结构本身的效果是什么?
What is the effect of typedef'ing a struct to itself?
我看到过在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
。
相关文章:
- C++中"dependent name"的定义是什么?
- 什么是自定义比较器以及如何在 C++ 的排序函数中使用它?
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 在模板类之外定义友元函数的正确方法是什么?
- 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 自定义数据结构的优点是什么?
- [未定义提及'SetLastError@4']是什么意思?
- 在C++中,创建'n'数量的对象的推荐方法是什么,其中n是用户定义的。我该怎么做?
- 此模板定义在 C++ 中是什么意思?
- 根据 c++ 标准在该宏定义中推送/弹出宏时的行为是什么
- 私有在函数定义/实现的返回值范围内是什么意思 (c++)?
- 这种错误的原因是什么:将"功能"重新定义为不同类型的符号
- 朋友定义函数的名称空间是什么
- 对struct::struct的未定义引用是什么意思
- c++ 17 中结构自动定义构造函数的规则是什么?
- 在 .text 部分中定义只读数据的原因是什么?
- 将字段(在类中)定义为引用的缺点是什么?
- (.text+0x20):对"主要"的未定义引用是什么意思
- Arduino IDE中自定义库类的.h文件编译错误的原因是什么