我知道宏可能没有作用域的概念,但请帮助我理解以下输出-这似乎表明宏是函数的本地输出:
#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正是你所期望的。
请注意,所有预处理器指令都已消失,
A
和define
之间的所有undef
实例都已替换为100
。要记住的是:
前置处理器运行,更改文本
然后编译器在结果上运行
关于c - #define在单个主文件中的范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9957830/