我想知道这个代码的输出背后的原因。 我无法想出答案。
#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)
我想知道这个代码的输出背后的原因。 我无法想出答案。
#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)
h(f(1,2))
f(1,2)
代入a
。 a
不是主题#
或##
运算符,所以它扩大到12
。 现在你有g(12)
这将扩展为"12"
。
g(f(1,2))
f(1,2)
代入a
。 的#
施加到操作者a
防止宏扩展,所以结果是字面上"f(1,2)"
。
只是做了更换。
h(f(1, 2)) -> g(12) -> "12"
g(f(1,2)) -> "f(1, 2)"
你也应该看到在这里 。