Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 嵌套宏:展开顺序_C_Macros - Fatal编程技术网

C 嵌套宏:展开顺序

C 嵌套宏:展开顺序,c,macros,C,Macros,可能重复: 我对宏的求值顺序有疑问。对于以下代码,我无法理解输出: #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; } 为什么不在第二次打印中先展开f,然后再展开g?这是宏如何展开的结果,对自引用宏有影响。。。

可能重复:

我对宏的求值顺序有疑问。对于以下代码,我无法理解输出:

#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;
}

为什么不在第二次打印中先展开f,然后再展开g?

这是宏如何展开的结果,对自引用宏有影响。。。这在

中得到了很好的详细解释,这个(确切的!)问题在这里被问了不止一次。thnx伙计们…从重复的帖子中得到了我的答案:)
12
f(1,2)