关于 c:Macro 重定义警告 | 珊瑚贝

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*x11.5*1.5,0.5)/pow(1.489*1.489x1*x1,0.5))\\
        + atan(pow(x1*x11.450*1.450,0.5)/pow(1.489*1.489x1*x1,0.5))\\
        4.5 * EPS * ((2 * M_PI)/(1.5 * EPS)) * pow(1.489*1.489x1*x1,0.5)\\
        + m*M_PI*1.5;
        y2=atan(pow(x2*x21.5*1.5,0.5)/pow(1.489*1.489x2*x2,0.5))\\
        + atan(pow(x2*x21.450*1.450,0.5)/pow(1.489*1.489x2*x2,0.5))\\
        4.5 * EPS * ((2 * M_PI)/(1.5 * EPS)) * pow(1.489*1.489x2*x2,0.5)\\
        + m*M_PI*1.5;
        if(y1*y2>0){
                printf(“change initial values\
);
             }
        else{
        while(fabs(x1x2)>EPS){
        xm=(x1+x2)/2;
        ym=atan(pow(xm*xm1.5*1.5,0.5)/pow(1.489*1.489xm*xm,0.5))\\
        + atan(pow(xm*xm1.450*1.450,0.5)/pow(1.489*1.489xm*xm,0.5))\\
        4.5 * EPS * ((2 * M_PI)/(1.5 * EPS)) * pow(1.489*1.489xm*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/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9642.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?