#define
的范围一直到文件末尾。但是它从哪里开始。 基本上我尝试了下面的代码。#define预处理器的范围C
#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。这是不正确的,但请解释原因。
请记住它是PREprocessing。它不知道或关心你的代码的结构,在#define的情况下,它正在按照它看到它们的顺序进行替换,这个替换与最新的#defined变量的值相关。 – Joe 2011-06-16 22:55:03
这段代码实际上是格式不正确的:除非定义相同,否则不能'定义与当前定义的另一个宏具有相同名称的宏。所以,第二个'#define pi'使程序不合格。你需要先#undef pi'。 – 2011-06-16 23:05:48
* #define的范围直到文件末尾。*否,文件结尾**或#undef **具有相同的宏标识符。 – Jens 2013-11-14 21:10:32