2017-01-22 134 views
0

我正在编写此代码,并在尝试编译时出现警告。宏重新定义警告

#include <stdio.h> 
#include <math.h> 
#define EPS 1.5e-6 
#define M_PI 3.14159265358979 
int main() 
{ 
double x1,x2,xm,y1,y2,ym; 
int m; 
for(m=0;m<11;m++){ 
     x1=1.450; 
     x2=1.489; 
     y1=atan(pow(x1*x1-1.5*1.5,0.5)/pow(1.489*1.489-x1*x1,0.5))\ 
     + atan(pow(x1*x1-1.450*1.450,0.5)/pow(1.489*1.489-x1*x1,0.5))\ 
     - 4.5 * EPS * ((2 * M_PI)/(1.5 * EPS)) * pow(1.489*1.489-x1*x1,0.5)\ 
     + m*M_PI*1.5; 
     y2=atan(pow(x2*x2-1.5*1.5,0.5)/pow(1.489*1.489-x2*x2,0.5))\ 
     + atan(pow(x2*x2-1.450*1.450,0.5)/pow(1.489*1.489-x2*x2,0.5))\ 
     - 4.5 * EPS * ((2 * M_PI)/(1.5 * EPS)) * pow(1.489*1.489-x2*x2,0.5)\ 
     + m*M_PI*1.5; 
     if(y1*y2>0){ 
       printf("change initial values\n"); 
      } 
     else{ 
     while(fabs(x1-x2)>EPS){ 
     xm=(x1+x2)/2; 
     ym=atan(pow(xm*xm-1.5*1.5,0.5)/pow(1.489*1.489-xm*xm,0.5))\ 
     + atan(pow(xm*xm-1.450*1.450,0.5)/pow(1.489*1.489-xm*xm,0.5))\ 
     - 4.5 * EPS * ((2 * M_PI)/(1.5 * EPS)) * pow(1.489*1.489-xm*xm,0.5)\ 
     + m*M_PI*1.5; 
     if(y1*ym>0){ 
x1=xm; 
} 
else{ 
x2=xm; 
} 
     } 
     printf("n[%d] = %.9f;\n",m, xm); 
} 
} 
return 0; } 

的警告是:

警告: 'M_PI' 宏重新定义[-Wmacro重新定义]

我无法弄清楚如何使报警消失

+0

意味着我要改变变量的名字吗?对不起,我对编程很陌生 –

+0

也许关于方程式的一些评论会帮助维护这些代码的人 - 并且让我们理解它 –

回答

1

如果有要使用宏已定义(可能定义为一个有用的值)的可能性,那么你可以简单地检查为:

#ifndef M_PI 
# define M_PI my_value_here 
#endif 

或者,如果你不信任现有的值,你可以在这种情况下,中止翻译:

#ifdef M_PI 
# error Macro M_PI must not be defined 
#else 
# define M_PI my_value_here 
#endif 

这似乎是GNU C library定义的宏(条件),因为“UNIX98标准“需要他们。

1

POSIX definesM_PI作为Pi的值作为扩展到C标准。所以,如果你在POSIX系统上,你不需要定义你自己的M_PI

但是,如果你不想那么你可以只编译标准C的模式,如:

gcc -Wall -Wextra -std=c11 file.c