宏作为C中宏的参数

时间:2014-02-17 09:11:21

标签: c macros

我想知道在下面的代码中首先替换哪个宏

#define A 100
#define B 200
#define C(A,B) A+B

这里当我们使用C时,评估将是从左到右或从右到左。这是B首先获得值或A首先获得值

我给这个例子只是为了让事情变得简单,可能是我错了。我想问的实际问题是,如果A和B也采用参数并具有扩展范围,那么哪一个会先扩展

1 个答案:

答案 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 + 2AB的定义无关紧要。

当然,我必须说我发现上述非常糟糕的做法,因为它很混乱。永远不要对宏参数使用全大写字母名称,因为宏和预处理程序符号倾向于使用这样的名称。