为什么我没有在以下c程序中获得预期的输出?

bor*_*ree 10 c macros

可能重复:
"#define STR(a)#a"有什么作用?
c编程语言中的宏评估

#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)

有人可以解释是什么原因以及为什么会发生这种情况?

glg*_*lgl 3

我用额外的一行扩展了你的程序

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)展开。