范围#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);}
Run Code Online (Sandbox Code Playgroud)
上述程序的输出结果如下
3.140000
3.141416
Run Code Online (Sandbox Code Playgroud)
考虑到主要的预处理,pi的值应该是3.141516并且在主3.14之外.这是不正确的,但请解释原因.
bta*_*bta 22
C预处理器从上到下运行文件,并将#define语句视为美化的复制和粘贴操作.一旦它遇到的线#define pi 3.14,它开始替换单词的每个实例pi有3.14.预处理器不处理(或甚至注意)C语言范围机制,如括号和花括号.一旦看到a #define,该定义就会生效,直到达到文件末尾,宏未定义#undef,或者(如本例所示)宏用另一个#define语句重新定义.
如果你想要遵守C范围规则的常量,我建议使用更多的东西const float pi = 3.14;.
| 归档时间: |
|
| 查看次数: |
23171 次 |
| 最近记录: |