【问题标题】:C++ warning: suggest parentheses around arithmetic in operand of |C++ 警告:建议在 | 的操作数中使用括号括起来
【发布时间】:2010-06-04 06:45:46
【问题描述】:

我有一个类似的代码

A = B|C|D|E;

抛出警告“在 | 的操作数中建议用括号括起来”

预计表达式需要高优先级的运算符括号,尝试了以下方法:

A=(B|C)|(D|E);

还有一个:

A=(((B|C)|D)|E);

同样的警告仍然存在。

请帮我解决这个问题。

谢谢, 素佳他

B、C、D 是枚举,E 是整数。

【问题讨论】:

  • 你使用的是哪个编译器?
  • 您的示例使用 GCC 编译时不会发出警告。
  • 究竟什么是 B C D 和 E?
  • @Programmer:通过gcc -E 运行您的源文件并查看输出。您绝对确定编译器对 A、B、C、D 和 E 的解释是您认为的那样吗?
  • @Programmer:您能发布您正在使用的确切编译器选项吗? (我似乎也无法通过gcc-4.3-Wall -Wextra 收到此警告)

标签: c++ warnings parentheses


【解决方案1】:

你的表达式中有一些算术运算符不是真正简单的 B,或者不是真正简单的 C 等。编译器建议你用括号括起来,这样读者就会看到你写的就是你的意思.如果你不加括号,那么每个人都必须准确地记住优先级是什么,并且他们必须弄清楚你是否记得你写它的时候。

试试这个:(B)|(C)|(D)|(E)。

【讨论】:

  • B、C、D 是枚举,E 是整数
  • 我认为你最好按照 grayfade 的建议,通过 gcc -E 运行你的源文件。您的其中一个枚举可能会意外地成为您不知道的宏。
【解决方案2】:

这是一个奇怪的警告。当您使用不同的运算符并且这些运算符具有不同的优先级时,您才真正需要注意优先级。例如,算术乘法的优先级高于加法。

但在这种情况下,您只需要多次使用一个运算符。按位 or 是关联和可交换的((A | B) | C == A | (B | C)A | B == B | A),所以真的没有理由发出警告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-04
    • 2018-02-11
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 2019-09-26
    • 2018-07-04
    相关资源
    最近更新 更多