为什么Clang警告:"'&&'位于'||'`?

wz3gfoph  于 2023-01-04  发布在  其他
关注(0)|答案(2)|浏览(190)

我的理解是圆括号没有什么区别,所以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) {
                                 ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
a64a0gku

a64a0gku1#

自然的趋势是从左到右读,很容易忘记操作符的优先级。也就是说,这只是一个警告,如果你知道自己在做什么,而且你自己的风格允许,那么你可以随意地抑制它。

4c8rllxm

4c8rllxm2#

我猜测是因为它只是有点不清楚,除非读者非常擅长C的运算符优先规则。
你的表情是这样的:

if (A && B || C && D)

并且由于&&||具有更高的优先级,这意味着

if ((A && B) || (C && D))

我猜你就是这个意思,但阅读起来不是很清楚

相关问题