2011-10-17 14 views
5

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?

+0

qué compilador usas? el mismo código da m = 4 yn = 6 para mí (Visusal Studio 2010) –

+0

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

+0

Estoy usando gcc. – phoxis

Respuesta

9

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).

+1

"C no permite que un programa correcto contenga dicha expresión". Sí lo hace; simplemente no especifica su comportamiento. No es lo mismo. – EJP

+0

@EJP: Tal programa no es correcto. – caf

+0

si tal programa no es correcto, el compilador no debería compilarlo. – EJP

Cuestiones relacionadas