1

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

4

1 回答 1

6

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

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

#define FIVE 5

int a = FIVE;

编译器只会看到:

int a = 5;

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

于 2009-10-10T23:08:52.010 回答