符号常数:它们是如何存储的以及它们的类型是什么?

Sco*_*ott 1 compiler-construction preprocessor

C++允许您使用#define预处理程序指令来定义编译器在编译之前将替换的符号常量.我的问题是,编译器通常如何在内部存储它们并且它们是否具有数据类型?

Gre*_*ill 6

严格来说,编译器永远不会看到使用#define预处理器指令声明的常量.这些由预处理器在文本替换的基础上处理.它们在C++意义上没有"类型",因为预处理器对C++语言语义一无所知.

预处理器使用简单的文本替换策略来解析宏.例如,在以下代码中:

#define FIVE 5

int a = FIVE;
Run Code Online (Sandbox Code Playgroud)

编译器只会看到:

int a = 5;
Run Code Online (Sandbox Code Playgroud)

符号FIVE从编译器看到的源中消失.您的编译器将只能运行预处理器; 在海湾合作委员会,它是-E在MSVC /E/P它.使用这样的选项,您可以通过预处理器运行源代码以查看其更改方式.