【发布时间】:2023-04-08 08:38:01
【问题描述】:
我的理解是括号没有区别,那么 Clang 是否有任何理由(除了“提高”代码清晰度)警告这是默认值?我不喜欢添加括号,因为我不喜欢为了代码而添加代码。
src/websocket.c:420:43: warning: '&&' within '||' [-Wlogical-op-parentheses]
if (rv == 0 && N != 0 || rv == -1 && errno == ECONNRESET) {
~~ ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
src/websocket.c:420:43: note: place parentheses around the '&&' expression to
silence this warning
if (rv == 0 && N != 0 || rv == -1 && errno == ECONNRESET) {
~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
【问题讨论】:
-
为了清晰添加代码怎么样?这里的括号可以帮助那些不记得
&&和||优先规则的人(这些规则并不经常出现)。 -
我完全赞成添加代码以提高清晰度。然而,就我个人而言,我发现在这种情况下,不必要的括号的额外视觉噪音会降低清晰度。当我看到多余的括号时,我会立即扫描整行寻找它们的原因,当我没有找到时,我必须思考一会儿,如果我读错了,或者有问题的代码只是试图“帮助”我了解我已经知道的运算符优先级。这段代码绝对不适合没有经验的程序员,大多数阅读它的人都在我的水平,因此我认为会有同样的感觉。
-
@KingsIndian 编译器还警告
if (x = 3),这是完全合法的。关键是,它被认为是人们经常出错的东西,所以编译器作者认为这是值得警告的。 -
我也总是修复警告,并且发现人们提倡我添加不必要的代码来帮助那些未能学习诸如运算符优先级之类的重要内容的人是荒谬的。上帝保佑我曾经雇用过这么糟糕的程序员。
-
为什么每个人都如此强烈地捍卫这个警告?如果每次你说“2 + 3 * 4”时编译器都会警告你,你会有什么感觉?这太荒谬了。假设程序员对他们正在使用的语言有基本的理解,并且不需要视觉混乱来理解优先级。另一方面,Xcode 似乎没有提供默认禁用此功能的选项...