【发布时间】:2011-06-16 20:52:21
【问题描述】:
我猜大多数使用过 C/C++ 的人都对预处理器的工作原理(或多或少)有直觉。直到今天我都这么认为,但事实证明我的直觉是错误的。故事如下:
今天我尝试了一些东西,但我无法解释结果。 首先考虑以下代码:
#define A B
#define B A
A
B
会发生什么?嗯,用-E标志编译后的结果是这样的:
A
B
嗯,好吧,也许不是任何人所期望的,但这是可以解释的。我猜是预处理器发现了一些问题,然后什么也没做。
接下来我尝试的是这样的:
#define A B
#define B A C
#define C x
A
B
现在,对我来说,无法解释的结果:
A x
B x
这是怎么发生的?我无法弄清楚这是如何发生的任何合理的方式。第一个命令 (#define A B) 无法执行,因为 A 将被 B 替换,最终结果应该相同。但如果不是,那么“A x”就不可能发生!
我的问题:我错过了什么?显然我不知道预处理器如何工作的确切方式。你知道它的任何来源吗?
【问题讨论】:
-
这就是为什么#defines需要避免......
-
是的,这是另一个原因.. 并不是说我根本不使用它们。对于某些任务,它们非常有用(也是 i.m.o. 的方法)。
标签: gcc c-preprocessor