这是GCC的问题吗?我试过在Windows上运行它并没有引发这个警告。有没有办法(插入括号除外)?
#include <stdio.h>
int x, y;
int main (void)
{
x = 3;
y = 7;
if ((y < 2) || (y > 5) && (x < 12)) {
printf ("Yes\n");
} else
printf ("Nope\n");
return 0;
}
结果:
/Users/filename:18:28: warning: '&&' within '||' [-Wlogical-op-parentheses]
if ((y < 2) || (y > 5) && (x < 12)) {
~~ ~~~~~~~~^~~~~~~~~~~
/Users/filename:18:28: note: place parentheses around the '&&' expression to
silence this warning
if ((y < 2) || (y > 5) && (x < 12)) {
^
( )
答案 0 :(得分:3)
您的回答是here:
自然倾向是从左到右阅读,并且很容易忘记运算符优先级。那就是说,这只是一个警告,如果你知道自己在做什么,而你自己的风格允许它,请随意压制它。
并压制它:
对于那些想要压制它的人,请将
-Wno-logical-op-parentheses
附加到您的构建系统的 CFLAGS