2011-03-09 3 views
9

자바와 C에서 다음과 같은 코드를 썼습니다.하지만 그 프로그램의 출력은 다릅니다. Java 응용 프로그램에서 21 개, C 응용 프로그램에서 22 개 (GCC 컴파일러 사용)를 제공했습니다.왜 Java에서 동일한 코드가 다르게 작동합니까?

설명해 주시겠습니까?

다음은 자바 코드입니다.

class test 
{ 

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

} 

여기에 C 코드가 있습니다.

#include <stdio.h> 

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

분명하지 않은 경우 절대로 "Hello world"유형의 프로그램에 속하지 않는 프로그램에 이런 코드를 작성하면 안됩니다. – darioo

+3

@darioo 결코 절대로. 그것은'!! a'와 같습니다. –

+4

@Radek : 영어가 조금 다르게 작동합니다. – darioo

답변

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

이것은,이 충돌하거나가 원하는대로 할 수있는 다른 출력 (21, 22), (42) 수 즉, C의 undefined behavior이다. 스. 라 오브젝트의 값이 중간에 개입하지 않고 동일한 표현식 내에서 두 번 이상 변경 되 G로 UB입니다. sequence points

동작은 더 많은 순서 점을 갖기 때문에 Java에서 정의됩니다. Here's an explanatory link

+0

이것이 정의되지 않은 이유는 무엇입니까? – Janaka

+0

@Janaka : 내 편집 참조 –

+0

Java에서 정의 된 동작입니까? – Thilo

3

Java 평가에서 left to right이므로 결과는 일관됩니다. 6 + 7 + 8 == 21

관련 문제