#define的范围直到
文件结尾.但是从哪里开始.
基本上我试过下面的
代码.
#include<stdio.h>
#include<stdlib.h>
#define pi 3.14
void fun();
int main()
{
printf("%f \n",pi);
#define pi 3.141516
fun();
return 0;
}
void fun(){
printf("%f \n",pi);}
上面的程序的输出是出来的
3.140000
3.141416
考虑到主要的预处理,pi的值应为3.141516
外面主要是3.14.这是不正确的,但请解释为什么.
C预处理器通过
文件从顶部到
底部运行,并处理#define语句,如荣耀的复制和粘贴操作.一旦遇到#define pi 3.14的行,它就会用3.14替换字pi的每一个实例.预处理器不处理(甚至
通知)C语言范围设定机制,如括号和大括号.一旦看到#define,那个定义才有效,直到
文件的末尾到达,宏将被#defef定义,或者(在这种情况下),宏被另外一个#define语句重新定义.
如果你想要遵循C范围规则的常量,我建议在const float pi = 3.14的行上使用更多的东西.