Sé lo que es la evaluación de cortocircuitos en C.
a && b
(el operando b no se verifica si a = 0)
a || b
(el operando b no se verifica si a = distinto de cero)
Pero estoy atascado en esta pregunta.
int x = 0;
if (5 || 2 && ++x)
printf("%d", x);
Esto produce 0
.
Mi primer pensamiento es el siguiente:
Según la tabla de precedencia, la precedencia es ++
, &&
, ||
(orden descendiente)
-
++x
:evaluated.x
se convierte en 1 -
2 && ++x
evaluado. Se evalúan ambos operandos. -
||
se evalúa.
Pero de acuerdo con esto, 1
debe imprimirse, no 0
.
Mi segundo pensamiento es así:
5 || anything
anything
no se evalúa debido a la evaluación de cortocircuito, por lo que aquí no entra en juego ninguna precedencia.