1

我正在阅读有效的 C++。当谈到第 2 项(更喜欢 const、枚举和内联而不是 #define)时,Scott 说:#define 通常被视为不是语言的一部分,它可能会在源代码到达之前被预处理器删除编译器。

谁能给我举个例子吗?谢谢。

4

2 回答 2

1

这是一个有点模糊的陈述,但从形式上讲,预处理器是一个单独的编译阶段,而在过去,预处理器是一个单独的程序,它在编译器看到代码之前就完成了它的工作。大多数编译器都可以选择只进行预处理,这有时有助于找出某些代码误入歧途的地方。但是在“好像”规则下,编译器不必单独的阶段进行预处理;它只需要产生与它已经完成的结果相同的结果。

于 2012-11-15T16:28:13.253 回答
0

这是一个非常简单的例子:

#define MAX_COUNT 256

MAX_COUNT预处理器将在将相关范围内的每个出现替换为256之前,然后将其传递给编译器。

从广义上讲,您可以将其视为宏:

#define FOO(a,b) a*b+a+b

将替换FOO(a,b)a*b+a+b

更多关于预处理器的阅读,你也可以参考这个页面

于 2012-11-15T16:26:49.437 回答