我想知道此代码输出背后的原因。我无法想出答案。
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
void main()
{
printf("%s %s",h(f(1,2)),g(f(1,2)));
}
PS:输出为12 f(1,2)
。我以为是12 12
或f(1,2) f(1,2)
。
答案 0 :(得分:5)
h(f(1,2))
f(1,2)
代替a
。 a
不是#
或##
运算符的主题,因此它已扩展为12
。现在,您g(12)
扩展为"12"
。
g(f(1,2))
f(1,2)
代替a
。应用于#
的{{1}}运算符会阻止宏扩展,因此结果实际上是a
。
答案 1 :(得分:3)