我的理解是括号没有区别,所以有没有任何理由(除了“改善”代码清晰度)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) {
~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
答案 0 :(得分:24)
自然倾向是从左到右阅读,并且很容易忘记运算符优先级。也就是说,这只是一个警告,如果你知道你正在做什么,你自己的风格允许它,你可以随意压制它。
答案 1 :(得分:21)
我猜是因为它只是有点不清楚,除非读者非常擅长C's operator precedence rules。
你的表达是这样的:
if (A && B || C && D)
由于&&
的优先级高于||
,因此意味着
if ((A && B) || (C && D))
我猜你的意思是什么,但在阅读时并不是很清楚。