BUSCAR
INICIO
MAPA
FAQs
UTILIDADES
GLOSARIO
REGISTRO
COLABORAR
QUIENES SOMOS

USUARIO

PASSWORD

FAQs
4. Expresiones

2. Con mi compilador, el siguiente código imprime “Copias 49”. ¿Independientemente del orden de evaluación, esto no debería imprimir 56? 
int i = 7;
printf("%d\n", i++ * i++);

Aunque los operadores de postincremento y postdecremento ++ y -- realicen sus operaciones después de que ceder el valor anterior, el significado "de después" a meno es mal entendido.

No se garantiza que un incremento o decremento se realice inmediatamente después dejarse el valor anterior y antes de que cualquier otra parte de la expresión sea evaluada.

Simplemente se puede garantizar que la actualización será realizada justo antes de que la expresión sea considerada "terminada".

En el ejemplo, el compilador decidió multiplicar el valor anterior por sí mismo y realizar ambos incrementos después.
 
El comportamiento de código que contiene efectos colaterales múltiples y ambiguos siempre ha sido indefinido. No intentes averiguar como va a funcionar tu compilador. Es mejor que cambies el código para que funcione con cualquier compilador, independientemente de cómo trate estos casos.