我正在阅读有效的 C++。当谈到第 2 项(更喜欢 const、枚举和内联而不是 #define)时,Scott 说:#define 通常被视为不是语言的一部分,它可能会在源代码到达之前被预处理器删除编译器。
谁能给我举个例子吗?谢谢。
我正在阅读有效的 C++。当谈到第 2 项(更喜欢 const、枚举和内联而不是 #define)时,Scott 说:#define 通常被视为不是语言的一部分,它可能会在源代码到达之前被预处理器删除编译器。
谁能给我举个例子吗?谢谢。
这是一个有点模糊的陈述,但从形式上讲,预处理器是一个单独的编译阶段,而在过去,预处理器是一个单独的程序,它在编译器看到代码之前就完成了它的工作。大多数编译器都可以选择只进行预处理,这有时有助于找出某些代码误入歧途的地方。但是在“好像”规则下,编译器不必在单独的阶段进行预处理;它只需要产生与它已经完成的结果相同的结果。
这是一个非常简单的例子:
#define MAX_COUNT 256
MAX_COUNT
预处理器将在将相关范围内的每个出现替换为256
之前,然后将其传递给编译器。
从广义上讲,您可以将其视为宏:
#define FOO(a,b) a*b+a+b
将替换FOO(a,b)
为a*b+a+b
更多关于预处理器的阅读,你也可以参考这个页面。