Pourquoi ne Clang avertir: `&&' dans '||"?

Ma compréhension est les parenthèses ne font aucune différence, donc, il y a une raison quelconque (autre que pour “améliorer“ code de la clarté) qui Clang avertit cela comme un défaut? Je préfère ne pas ajouter les parenthèses que je n'aime pas l'ajout du code du saké.

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) {
                                 ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
  • Comment au sujet de l'ajout de code pour plus de clarté? Entre parenthèses, ici, aidera les gens qui ne se souviennent pas les règles de priorité de && et || (qui n'est pas souvent).
  • Je suis pour l'ajout de code pour améliorer la clarté. Personnellement, cependant, je propose en plus du bruit visuel de l'inutile parenthèses réduit la clarté dans ce cas. Quand je vois le supplément de parenthèses, j'ai immédiatement de numériser l'ensemble de la ligne de la recherche d'une raison pour eux, quand je trouve rien je puis avoir à réfléchir pendant un moment si je le lis mal ou si le code en question est simplement d'essayer de les “aider” me à comprendre la priorité de l'opérateur, que je connaissais déjà. Ce code n'est certainement pas pour les programmeurs inexpérimentés, la plupart des gens qui lisent ce sera à mon niveau, et donc je suppose que penseront de même.
  • Bien que le point sur la clarté est valide, il semble étrange pour alerter pour parfaitement légal de code selon les règles de la langue.
  • Un peu ne semblent étranges. Mais je ne sais pas si j'ai jamais vu un compilateur juste sortie d'un note: sans warning:. Il n'y a pas une telle chose comme un compilateur avis (c'est à dire: un message qui n'est pas un avertissement ou une erreur, mais juste quelque chose que le compilateur pense que vous devez être conscients de la). Si il y a une telle chose, le message devrait être à ce niveau.
  • Les compilateurs aussi mettre en garde if (x = 3), ce qui est parfaitement légal. Le point est, il est réputé quelque chose que les gens souvent se tromper, de sorte que le compilateur écrivains décidé qu'il vaut la peine d'avertissement.
  • Les parenthèses ne font aucune différence si elle est présente, comme { } autour d'une ligne if consolidés. Ils augmentent la clarté de l'expression et de diminuer les chances de programmeur et le compilateur malentendu. Quel Bruit fait ici est de vous dire, "ce qui pourrait être compris de toute façon; êtes-vous sûr que vous avez raison?". L'ajout de parenthèses indique que, oui, vous l'avez droit. La désactivation de l'avertissement, d'autre part, supprime juste le filet de sécurité. I connaître les règles de priorité, mais quand je vois le code sans les parenthèses, je me demande si l'autre gars savait trop...
  • Je comprends pourquoi le compilateur ne que. Personnellement, ce genre de situation, serait de m'ennuyer quand je suis obligé d'ajouter un couple de parenthèses, comme j'ai toujours corriger les avertissements.
  • J'ai toujours corriger les avertissements aussi, et il trouve ridicule que les gens défendent j'ai rajouter du code pour aider les gens qui n'ont pas réussi à apprendre des choses importantes comme la priorité de l'opérateur. À dieu ne plaise que j'ai jamais utiliser ce genre de terrible programmeur.
  • Nous allons être d'accord pas d'accord ici. C n'est pas un pardon de la langue, je m'attends à tous ceux qui lisent mon C à savoir la priorité de l'opérateur et de s'attendre à ce me pour connaître la priorité des opérateurs aussi. Dans le cas où vous pensez que je suis en quelque sorte en préconisant l'écriture de code peu clair, alors bien sûr, je ne suis pas. La clarté est très important dans le code. Cependant, comme je l'ai déjà expliqué dans mon commentaire ci-dessus, je ne pense pas que la parenthèse supplémentaires aider à quoi que ce soit ici. Dans un cas où, je ne le crois plus grande clarté est nécessaire, je serais plus susceptibles de mémo les && regroupements locaux des variables booléennes. serait le rendre plus clair.
  • D'accord, la priorité relative de && et || est assez fondamental (pas tout à fait d'aussi fondamental que * sur +), et la mise en garde ici est un peu trop paranoïaque. Encore, l'avertissement du compilateur à propos douteux constructions est une bonne chose, de l'OMI, tant qu'on peut activer l'avertissement off.
  • Avertissement sur if (a = 0) est une catégorie tout à fait différente de l'avertissement. Peut-on même imaginer une situation où quelque chose comme if (a = 0) serait souhaitée?
  • Pourquoi tout le monde est à la défense de cet avertissement avec tant de véhémence? Comment vous sentiriez-vous si le compilateur vous averti à chaque fois que l'on vous dit "2 + 3 * 4"? Il est au-delà du ridicule. L'hypothèse est que les programmeurs ont une compréhension de base de la langue qu'ils travaillez et n'avez pas besoin d'encombrement visuel pour comprendre la priorité. Sur une autre note, Xcode ne semble pas fournir une option pour désactiver cette fonction par défaut...
  • Amen à tous ceux qui pensent que cet avertissement est stupide. Je ne peux pas croire que je vais avoir à traiter avec un avertissement pour l'écriture de code, en particulier celui qui est si évidemment orienté vers les débutants en programmation. Le Code doit mal fonctionner si vous ne connaissez pas la priorité de l'opérateur de la table. Ayant pour déboguer les erreurs de ce genre quand j'étais en apprentissage était exactement la chose qui m'a prouvé l'importance de la mémorisation de l'OPT! Je pense que cette fonction ferme les yeux la paresse.
  • C, C++, Java, Java, Javascript, C#, et de tout donner && une priorité plus élevée que ||, compatible avec traditionnel des mathématiques. L'encombrement n'est pas la clarté -- Xcode devrait rendre plus facile pour éteindre cet irritant avertissement.

InformationsquelleAutor mxcl | 2013-06-05