Tengo entendido que los paréntesis no hacen ninguna diferencia, entonces, ¿hay alguna razón (aparte de “mejorar” la claridad del código) por la que Clang advierte esto como predeterminado? Prefiero no agregar los paréntesis porque no me gusta agregar código por el código.
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) {
~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
¿Qué tal agregar código para claridad ¿motivo? Los paréntesis aquí ayudarían a las personas que no recuerdan las reglas sobre la precedencia de
&&
y||
(que no todos los que a menudo surgen).– chao
5 de junio de 2013 a las 12:30
Estoy a favor de agregar código para mejorar la claridad. Personalmente, sin embargo, creo que el ruido visual adicional de los paréntesis innecesarios reduce la claridad en este caso. Cuando veo los paréntesis adicionales, inmediatamente escaneo toda la línea buscando una razón para ellos, cuando no encuentro ninguno, entonces tengo que reflexionar por un momento si lo leí mal o si el código en cuestión simplemente está tratando de “ayudarme”. para entender la precedencia del operador, eso ya lo sabía. este codigo es definitivamente no apto para codificadores sin experiencia, la mayoría de las personas que lo lean estarán a mi nivel y, por lo tanto, supongo que sentirán lo mismo.
– mxcl
5 de junio de 2013 a las 12:33
@KingsIndian Compilers también advierten sobre
if (x = 3)
, lo cual es perfectamente legal. El punto es que se considera algo en lo que las personas a menudo se equivocan, por lo que los escritores del compilador decidieron que vale la pena una advertencia.–Daniel Fischer
5 de junio de 2013 a las 12:43
Siempre corrijo las advertencias también, y me parece ridículo que la gente abogue por agregar código innecesario para ayudar a las personas que no han podido aprender cosas importantes como precedencia del operador. Dios no permita que alguna vez emplee a un programador tan terrible.
– mxcl
5 de junio de 2013 a las 16:51
¿Por qué todos defienden esta advertencia con tanta vehemencia? ¿Cómo te sentirías si el compilador te advirtiera cada vez que dices “2 + 3 * 4”? Es más que ridículo. La suposición es que los programadores tienen un básico comprensión del idioma con el que están trabajando y no necesitan desorden visual para comprender la precedencia. En otra nota, Xcode no parece proporcionar una opción para deshabilitar esto de forma predeterminada…
– Felipe Guin
17 de junio de 2013 a las 21:53