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

时间:2009-10-10 22:53:05

标签: compiler-construction preprocessor

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

1 个答案:

答案 0 :(得分:6)

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

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

#define FIVE 5

int a = FIVE;

编译器只会看到:

int a = 5;

符号FIVE已从编译器看到的源中消失。您的编译器将只能运行预处理器;在GCC中它是-E,而在MSVC中它是/E or /P。使用这样的选项,您可以通过预处理器运行源代码以查看它是如何更改的。