【发布时间】: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