两个相同的预处理器定义给出不同的结果

时间:2011-11-21 00:45:46

标签: c macros c-preprocessor

考虑一下代码段:

#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;

为什么?

1 个答案:

答案 0 :(得分:5)

#define M_0 CAT(x, y)
#define N_0() CAT(x, y)

M_0是一个简单的文字替换。 N_0是一个宏函数,在评估时,根据需要评估任何其他宏函数。