嵌套宏:扩展顺序

Amo*_*rma 5 c macros

可能重复:
为什么我没有在以下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)

产量

12
f(1,2)
Run Code Online (Sandbox Code Playgroud)

为什么f不会在第二个printf之前首先扩展?

Ahm*_*sud 0

这是宏扩展方式的结果,并且对自引用宏有影响... GNU CPP 手册对此进行了很好的详细解释