我想知道在下面的代码中首先替换哪个宏
#define A 100
#define B 200
#define C(A,B) A+B
这里当我们使用C时,评估将是从左到右或从右到左。这是B首先获得值或A首先获得值
我给这个例子只是为了让事情变得简单,可能是我错了。我想问的实际问题是,如果A和B也采用参数并具有扩展范围,那么哪一个会先扩展
答案 0 :(得分:3)
我不确定你的意思。从来没有一点可以“看到”预处理器的一半结果;整个输入文件被预处理,然后交给编译器。
我认为宏参数的名称永远不会被替换,就像它们是独立的符号一样。
我试过了,这个程序:
#include <stdio.h>
#define A 100
#define B 200
#define C(A, B) A + B
int main(void) {
printf("A=%d\nB=%d\nC(1,2)=%d\n", A, B, C(1,2));
return 0;
}
打印
A=100
B=200
C(1,2)=3
因此,C(1,2)
扩展为1 + 2
,A
和B
的定义无关紧要。
当然,我必须说我发现上述非常糟糕的做法,因为它很混乱。永远不要对宏参数使用全大写字母名称,因为宏和预处理程序符号倾向于使用这样的名称。