7

我想知道这段代码输出背后的原因。我想不出答案。

#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 12f(1,2) f(1,2)

4

2 回答 2

5
h(f(1,2))

f(1,2)被取代aa不是 a###运算符的主题,因此它扩展为12. 现在你有g(12)which 扩展为"12".

g(f(1,2))

f(1,2)被取代a#用于防止宏扩展的运算符a,因此结果字面意思是"f(1,2)".

于 2012-07-23T10:06:04.623 回答
3

只做替换。

h(f(1, 2)) -> g(12) -> "12"

g(f(1,2)) -> "f(1, 2)"

你也应该看到这里

于 2012-07-23T09:59:19.867 回答