1
考虑片段:两个相同的预处理器定义给出不同的结果
#define CAT(a, b) a##b #define M_0 CAT(x, y) #define M(a) CAT(M_, a)() M(0); #define N_0() CAT(x, y) #define N(a) CAT(N_, a)() N(0);
给我M(a)
和N(a)
两个定义看起来相同。 然而,GCC 4.6.1的cpp
这个扩展为:
CAT(x, y)(); xy;
为什么?
这老栗子了。如果没有引用出处,请不要抄袭原作者。 (答案:一个宏需要参数(数字为零),另一个不是。) –
@KerrekSB,坦率地说,我没有注意到其中的差异。 – ulidtko