我知道宏可能没有作用域的概念,但请帮助我理解以下输出-这似乎表明宏是函数的本地输出:

#include<stdio.h>
#include<stdlib.h>
#define A 100
void fun();
int main()
{

    fun();
    printf("%d\n",A);
    system("pause");
    return 0;
}
void fun()
{
    #undef A

}

程序的输出是100,但据我所知,这应该是一个编译器错误。请解释原因?

最佳答案

预处理器处理源代码的文本,并且在编译器开始正常运行之前完成。
实际上,编译器在一个看起来像

/* Lots of code from the included files omitted */
void fun();
int main()
{

    fun();
    printf("%d\n",100);
    system("pause");
    return 0;
}
void fun()
{

}

所以运行和打印100正是你所期望的。
请注意,所有预处理器指令都已消失,Adefine之间的所有undef实例都已替换为100
要记住的是:
前置处理器运行,更改文本
然后编译器在结果上运行

关于c - #define在单个主文件中的范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9957830/

10-11 22:43
查看更多