#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;
}
Run Code Online (Sandbox Code Playgroud)
我期待printf的输出相同.但我得到的是不同的(如下所示)
12
f(1,2)
Run Code Online (Sandbox Code Playgroud)
有人可以解释是什么原因以及为什么会发生这种情况?
我用额外的一行扩展了你的程序
printf("%d\n",f(1,2));
Run Code Online (Sandbox Code Playgroud)
这反过来又导致
printf("%d\n",12);
Run Code Online (Sandbox Code Playgroud)
(用 调用gcc -E)。
你的两行结果是
printf("%s\n","12");
printf("%s\n","f(1,2)");
Run Code Online (Sandbox Code Playgroud)
这里会发生什么?
f(1,2)很清楚 -1并且2只是粘在一起。
g(something)something只是作为字符串再现,而不对其进行特殊处理 -> "f(1,2)"。
h(something),反过来,让结果g(something)展开。