Shortcircuiting de AND en caso de operador de incremento / decremento
En el siguiente código:
#include <stdio.h>
int main()
{
int a = 1;
int b = 1;
int c = a || --b;
int d = a-- && --b;
printf("a = %d, b = %d, c = %d, d = %d", a, b, c, d);
return 0;
}
Esperaba que la salida fuera:
a = 0, b = 1, c = 1, d = 0
porque debido a un cortocircuito en la línea de abajo, es decir, a-- devuelve 0 para que la otra parte no se ejecute, ¿verdad?
int d = a-- && --b;
La salida es:
a = 0, b = 0, c = 1, d = 0
¿Alguien puede por favor explicar?