Macro Redefined Warning
我正在编写这段代码,当我尝试编译时出现警告。
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
#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\ “); } 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;\ “,m, xm); } } return 0; } |
警告是:
warning: ‘M_PI’ macro redefined [-Wmacro-redefined]
我不知道如何让警告消失
- 意味着我要更改变量名?对不起,我对编程很陌生
- 也许对方程式的一些评论将有助于维护此代码的人 – 并让我们理解它
如果您要使用的宏可能已经被定义(并且可能定义为有用的值),那么您可以简单地检查一下:
1
2 3 |
#ifndef M_PI
# define M_PI my_value_here #endif |
或者,如果您不信任现有值,您可以在这种情况下中止翻译:
1
2 3 4 5 |
#ifdef M_PI
# error Macro M_PI must not be defined #else # define M_PI my_value_here #endif |
似乎 GNU C 库(有条件地)定义了这些宏,因为”Unix98 标准”需要它们。
POSIX 将宏 M_PI 定义为 Pi 的值,作为 C 标准的扩展。所以,如果你在 POSIX 系统上,你不需要定义你自己的 M_PI。
但如果您不想这样做,则只能在标准 C 模式下编译,例如:
1
|
gcc –Wall –Wextra –std=c11 file.c
|
来源:https://www.codenong.com/41793355/