web-dev-qa-db-fra.com

Pourquoi Clang avertit-il: `` && 'dans' || ''?

Ma compréhension est que les parenthèses ne font aucune différence, donc y a-t-il une raison (autre que "d'améliorer" la clarté du code) que Clang prévient cela par défaut? Je préfère ne pas ajouter de parenthèses, car je n'aime pas ajouter du code pour le plaisir du code.

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) {
                                 ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
33
mxcl

La tendance naturelle est de le lire de gauche à droite, et il est facile d'oublier la priorité de l'opérateur. Cela dit, ce n'est qu'un avertissement, et si vous savez ce que vous faites et que votre propre style le permet, n'hésitez pas à le supprimer.

24
Wooble

Je suppose que c'est simplement un peu flou, à moins que le lecteur ne soit très bon en règles de priorité de l'opérateur C .

Votre expression est comme ça:

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

et depuis && a une priorité plus élevée que ||, ça veut dire

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

je suppose que c'est ce que vous voulez dire, mais ce n'est pas très clair lors de la lecture.

21
unwind