我在抄书上的程序的时候出现了这个问题
错误 4 error C2065: “INF”: 未声明的标识符 d:\al_code\suanfa3.c\suanfa3.c\suanfa3.c.cpp 17 1 suanfa3.c
有错误的代码是
#define LOCAL #define INF 100000 #include "stdafx.h" #include <stdio.h> #include "math.h" //#include <time.h> int main() { #ifdef LOCAL freopen("data.in","r",stdin); freopen("data.out","w",stdout); #endif int x,n=0,min= INF,max= -INF, s = 0; while(scanf("%d",&n)==1) { s+=x; if(x<min)min=x; if(x>max)max=x; /* printf("x = %d, min = %d, max = %d \n",x,min,max);*/ n++; } printf("%d%d %.3lf\n",min,max,(double)s/n); return 0; }
我想了想,把 #define INF 1000000放到了 main()函数的上面,在#include<>的下面 就无错误的了。
正确代码是
#define LOCAL #include "stdafx.h" #include <stdio.h> #include "math.h" //#include <time.h> #define INF 100000 int main() { #ifdef LOCAL freopen("data.in","r",stdin); freopen("data.out","w",stdout); #endif int x,n=0,min= INF,max= -INF, s = 0; while(scanf("%d",&n)==1) { s+=x; if(x<min)min=x; if(x>max)max=x; /* printf("x = %d, min = %d, max = %d \n",x,min,max);*/ n++; } printf("%d%d %.3lf\n",min,max,(double)s/n); return 0; }
请问 ,为啥就把定义的位置换了就出问题了?
因为#include相当于把库函数内容复制一遍,而宏定义则是在库函数的基础上看是否被定义,才不会出现错误。我也不太懂,应该是这样吧