考虑一下代码段:
#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;
为什么?
答案 0 :(得分:5)
#define M_0 CAT(x, y)
#define N_0() CAT(x, y)
M_0
是一个简单的文字替换。 N_0
是一个宏函数,在评估时,根据需要评估任何其他宏函数。