gpt4 book ai didi

c - #define 在单个主文件中的范围

转载 作者:太空宇宙 更新时间:2023-11-04 06:40:01 25 4
gpt4 key购买 nike

我知道可能没有宏范围的概念,但请帮助我理解以下输出 - 这似乎表明宏对函数而言是局部的:

#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 正是您所期望的。

请注意,所有预处理器指令都已消失,并且 defineundef 之间的所有 A 实例都已被替换100

要记住的是:

  • 预处理器运行,改变文本
  • 然后编译器根据结果运行

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com