【发布时间】:2011-06-16 22:49:49
【问题描述】:
#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
考虑到 main 的预处理,pi 的值应该是 3.141516 和主要的3.14之外。这是不正确的,但请解释原因。
【问题讨论】:
-
记住它是预处理。它不知道也不关心代码的结构,在 #define 的情况下,它会按照相对于 #defined 变量的最新值的顺序进行替换。
-
这段代码实际上是格式错误的:你不能
#define一个与当前定义的另一个宏同名的宏,除非它们的定义相同。所以,第二个#define pi使程序格式错误。你需要先#undef pi。 -
#define 的范围是直到文件的结尾。 不,文件的结尾或#undef 相同的宏标识符。
-
顺便说一句:你的 pi 值是错误的。
标签: c c-preprocessor