#include <stdio.h>
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
int main()
{
printf("%s\n",h(f(1,2)));
printf("%s\n",g(f(1,2)));
return 0;
}
仅仅通过查看这个程序,人们"可能"会预期printf语句的输出是相同的。但运行程序后,你会发现它的输出结果实际上是不同的:
bash$ ./a.out
12
f(1,2)
bash$
为什么会这样呢?
h(f(1,2))
和g(f(1,2))
的差异,从这个意义上说,@joe-bloggs的回答更加清晰。 - Vsevolod Ganin#define STR“AAA”``#define f(a)(STR#a)
那么f(BBB)
会是“AAA”“BBB”
还是“AAA BBB”
?这个单独的#
能在字符串中间连接参数吗? - Guodong Hu