【问题标题】:Has Eclipse's 'Suggested parenthesis around expression' solid grounds?Eclipse 的“建议在表达式周围加上括号”有坚实的基础吗?
【发布时间】:2014-10-27 07:39:29
【问题描述】:

使用 Eclipse 编码,我希望我的代码尽可能简洁。我基本上在我的 gcc 上激活了所有可能的警告,并且 -Werr 标志确保我不能忽视它们。

虽然我这样做了,但我没有任何编译问题(因为我的代码是有效的),但我仍然从 Eclipse 收到了这个烦人的警告:

表达式“flags & CONSTANT”周围的建议括号

正在考虑的表达式是

if(flags & CONSTANT || bufferUsed == 0) ...

Operators precedence 之后,按位与和等式的优先级均高于逻辑或。

Eclipse 只是愚蠢地根据一些待证明的情况发出警告,其中代码看起来像我的错误,还是发出的警告是可靠的?

【问题讨论】:

  • 看起来这只是一个警告,确保您的意思是 & 而不是 && 解释 here
  • 好吧,加括号并没有真正让你的代码更难阅读,事实上它更容易阅读,而且你确保没有人会在记住运算符优先级方面遇到麻烦。该警告对您来说可能看起来很愚蠢,但使用括号可能是明智的。
  • @Oilyraincloud 你的链接上解释的是赋值和比较运算符之间的混合,因为第一个具有较低的优先级,使整个表达式从右到左关联,因此有效地违背了直观的左到正确的阅读方式。它有效地解决了产生错误的常见方式。即使我打算使用&&,它的优先级仍然低于||,因此警告肯定有其他原因。
  • @FilipeGonçalves 我理解当低优先级运算符应该直观地接管优先级时发出警告(参见 Oilyraincloud 的示例)。按位与很少使用表达式作为其标记之一。因此,我认为除了CONSTANT 是按位与运算符的正确标记外,我认为没有人会直觉地期望任何其他东西。我仍然看不到可读性问题。也许在||== 之间,但这不是Eclipse 强调的。
  • 这个警告很烦人。程序员应该注意运算符的优先级。我不同意@Filipe Gonçalves,它确实使代码不可读。下一步是什么? 4*5+6 应该写成 (4*5)+6 的警告?

标签: c warnings eclipse-cdt operator-precedence


【解决方案1】:

我希望那些过于热情的编译器作者最终会提出类似这样的消息,而不是这种无能的警告,

if( 之间的建议空间

;-)

【讨论】:

  • 您是否建议没有空间是该警告消息的真正原因?
  • 一点也不...我建议消息“建议的括号 ...”比“建议的空格”更不方便...”。
猜你喜欢
  • 1970-01-01
  • 2016-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-04
  • 1970-01-01
相关资源
最近更新 更多