在程序编译期间,主要分为三个阶段:
- 预处理(所有
#include
,#define
等都被替换) - 编译(生成目标文件)
- 链接(目标文件链接到可执行文件)
我的问题是关于typedef
. 正如我在预处理文件输出中看到的那样,typedef
输入的 ed 不会被实际类型替换。
什么时候发生?是否有可能获得已经替换的类型?
在程序编译期间,主要分为三个阶段:
#include
,#define
等都被替换)我的问题是关于typedef
. 正如我在预处理文件输出中看到的那样,typedef
输入的 ed 不会被实际类型替换。
什么时候发生?是否有可能获得已经替换的类型?
正如我在预处理文件输出中看到的那样,类型定义的类型不会被实际类型替换。
不,它们不是,因为它们只是一种类型的别名。
什么时候发生?是否有可能获得已经替换的类型?
这是一个实现细节,但由于编译需要 typedef,所以它是在编译过程中完成的。使用编译器或预处理器无法获取真实类型。唯一的方法是手动替换,或者查看代码。
简短的回答:在编译期间。
typedef
是编译器评估和理解的构造,因此编译器发出将 tyedef 数据视为原始类型所需的代码。AFAIK,它是如何做到的,它是实现定义的,而不是未指定的。但它做了所有必要的事情。