C++允许你使用 #define 预处理器指令,用于定义编译器在编译前将替换的符号常量。我的问题是,编译器通常如何在内部存储这些数据,它们是否有数据类型?
#define
严格来说, 编译程序 从不看到用声明的常量 #define 预处理器指令。这些是在文本替换的基础上由 预处理器 . 它们在C++意义上没有“类型”,因为预处理器对C++语言语义一无所知。
预处理器使用简单的文本替换策略来解析宏。例如,在以下代码中:
#define FIVE 5 int a = FIVE;
编译器将只看到:
int a = 5;
符号 FIVE 从编译器看到的源文件中删除。编译器只能运行预处理器;在gcc中,它是 -E 在MSVC中 /E or /P . 使用这样的选项,您可以通过预处理器运行源代码,以查看它是如何更改的。
FIVE
-E
/E
/P