2017-01-22 14 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 definesマクロM_PIは、C標準への拡張としてのPiの値です。したがって、POSIXシステムを使用している場合は、自分自身を定義する必要はありませんM_PI

しかし、あなたは、あなたのようなだけで、標準Cモードでコンパイルすることができますしたくない場合は:

gcc -Wall -Wextra -std=c11 file.c 
関連する問題