considerar:Por qué salida difiere en C y Java en la expresión m ++ + (++ m)
int m = 2, n;
n = m++ + (++m);
En la salida C es:
m = 4, n = 4;
En la salida de Java es:
m = 4, n = 5;
¿Cómo sucede esto?
considerar:Por qué salida difiere en C y Java en la expresión m ++ + (++ m)
int m = 2, n;
n = m++ + (++m);
En la salida C es:
m = 4, n = 4;
En la salida de Java es:
m = 4, n = 5;
¿Cómo sucede esto?
Puede diferir porque C no permite que un programa correcto contenga dicha expresión; C no define el comportamiento de dicho programa. Esto le da a los compiladores C una gran latitud en la forma en que interpretan tales expresiones.
Java restringe más estrechamente las implementaciones definiendo el comportamiento esperado de expresiones como esta.
(La regla que se rompe en C es que una expresión no puede modificar el valor de un objeto más de una vez sin un punto de secuencia intermedio).
Como se indicó anteriormente, no debe escribir código como ese. Se trata de la secuencia de puntos y otros ;-)
Selecciona esta conferencia http://www.slideshare.net/olvemaudal/deep-c
Es muy útil.
qué compilador usas? el mismo código da m = 4 yn = 6 para mí (Visusal Studio 2010) –
Es porque no puede cambiar la misma variable dos veces en una instrucción sin punto de secuencia. Eso causa un comportamiento indefinido en C. – Dani
Estoy usando gcc. – phoxis