#define A(p1, p2, p3, p4) foo(p1, p2, p3, p4)
#define B(s) A(p1, p2, (s), p4)
这里,A() 是一个宏绑定,旨在增加可移植性,如果我们需要调用 bar(p1, p2, p3, p4) 并且不想重写整个代码库。
现在我正在尝试定义 B() 以使我更容易编写,因为 p1、p2 和 p4 通常具有相同的值。但是,这不起作用,除非我删除 s 周围的括号。到底是怎么回事?我要传递给 A 什么?
结果是:
#define foo(p1, p2, p3, p4) p1 ## p2 ## p3 ## p4()
我不确定 p4 是在哪里定义的,但我只有一个有效值。所以,当我通过 (s) 而不是 s 时,我得到p1p2
的是p1p2sp4
.