#include <stdio.h>
#define macro(n, a, i, m) m##a##i##n
#define MAIN macro(n, a, i, m)
int MAIN()
{
printf("GeeksQuiz");
return 0;
}
你好 在这个问题中,输出是geeksquiz,因为它说main首先被宏替换,然后再次被替换。实际更换在哪里进行? 它不只是定义函数吗? 谢谢
答案 0 :(得分:0)
这发生在编译器的翻译的第四阶段(称为预处理阶段)中。
您可以阅读“ Phases of Translation”
如果函数除了macro之外还有其他名称,它会执行相同的操作还是将其定义为不同的功能
是的。可以将“宏”更改为其他名称。
#define some_other_name(n, a, i, m) m##a##i##n
#define MAIN some_other_name(n, a, i, m)
我们如何知道何时替换主要功能。如果我看到它们被定义为单独的函数,是由于宏还是MAIN? (对不起,这是C的新知识)
因为MAIN被定义为MACRO,并且MACRO扩展产生main
。