预处理器和宏

时间:2018-10-22 05:23:52

标签: c

#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首先被宏替换,然后再次被替换。实际更换在哪里进行? 它不只是定义函数吗? 谢谢

1 个答案:

答案 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