为什么Clang警告:''&&'在'||'中?

时间:2013-06-05 12:24:14

标签: c clang

我的理解是括号没有区别,所以有没有任何理由(除了“改善”代码清晰度)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) {
                                 ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~

2 个答案:

答案 0 :(得分:24)

自然倾向是从左到右阅读,并且很容易忘记运算符优先级。也就是说,这只是一个警告,如果你知道你正在做什么,你自己的风格允许它,你可以随意压制它。

答案 1 :(得分:21)

我猜是因为它只是有点不清楚,除非读者非常擅长C's operator precedence rules

你的表达是这样的:

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

由于&&的优先级高于||,因此意味着

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

我猜你的意思是什么,但在阅读时并不是很清楚。