2011-03-09 8 views
9

Escribí los siguientes códigos en java y C. Pero la salida de esos programas es diferente. La aplicación Java dio 21 y la aplicación C dio 22 (yo uso el compilador GCC).¿por qué el mismo código funciona de manera diferente en Java?

¿Puede describir esto?

Aquí está el código JAVA.

class test 
{ 

    public static void main(String args[]) 
    { 
     int a =5; 
     int b = (++a) + (++a) + (++a); 
     System.out.println(b); 
    } 

} 

Aquí está el código C.

#include <stdio.h> 

int main(int argc, const char* argv[]) 
{ 
int a =5; 
int b = (++a) + (++a) + (++a); 
printf("%d \n",b); 
} 
+1

Si no es obvio, nunca debe, NUNCA escribir código como este en programas que no entran en el tipo de programas "Hola mundo". – darioo

+3

@darioo nunca nunca = siempre. Es como '!! a'. –

+4

@Radek: el idioma inglés funciona de manera un poco diferente – darioo

Respuesta

34
int b = (++a) + (++a) + (++a); 

Ésta es undefined behavior en C, lo que significa que puede salida 21, 22, 42, puede golpear o hacer cualquier otra cosa que quiera. Esto es UB porque el valor de un objeto escalar se cambia más de una vez dentro de la misma expresión sin intervención sequence points

El comportamiento se define en Java porque tiene más puntos de secuencia. Here's an explanatory link

+0

¿Por qué eso no está definido? – Janaka

+0

@Janaka: ver mi edición –

+0

¿Se define el comportamiento en Java? – Thilo

3

En la evaluación de Java es left to right, por lo que el resultado es coherente. 6 + 7 + 8 == 21

Cuestiones relacionadas