【问题标题】:How to fix the warning: '&&' within '||' [duplicate]如何修复警告:“||”中的“&&” [复制]
【发布时间】:2015-11-15 05:44:17
【问题描述】:

这是 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)) {
                           ^
                   (                  )

【问题讨论】:

  • 这是一个警告,而不是错误,
  • 投票重新打开,因为 OP 明确询问除了插入括号外如何修复 GCC 上的警告,并且链接的问题是针对 Clang 的,并且建议那里的解决方案不适用于 GCC。

标签: c gcc


【解决方案1】:

你的答案是here:

自然倾向于从左到右阅读,很容易忘记运算符的优先级。也就是说,这只是一个警告,如果您知道自己在做什么并且您自己的风格允许这样做,请随意压制它。

并压制它:

对于那些想要抑制它的人,将:-Wno-logical-op-parentheses 附加到您的构建系统的 CFLAGS

【讨论】:

  • -1 因为 OP 明确询问在 GCC 上解决此问题的方法,它不支持 Clang no-logical-op-parentheses 标志。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-28
  • 2019-08-08
  • 2020-11-28
  • 2017-10-25
  • 2017-07-03
  • 1970-01-01
  • 2019-12-07
相关资源
最近更新 更多