2012-07-27 3 views
0

이 가능한 중복은 :
Undefined Behavior and Sequence Points는 X = (X는 ++)

나는 다음과 같은 코드를 작성하고 [놀랍게도]는 인쇄 : XX : 1 ZZ : 0

나는 xx와 zz가 모두 0으로 인쇄되기를 기대했을 것입니다. 이것은 linux와 darwin에서 gcc 4.2, 4.4 및 4.7로 시도되었습니다. 몇 가지 연구에서 x = x ++는 정의되지 않은 동작이지만 (x ++)가 먼저 실행되고 0을 반환합니다. 누군가가이 이상한 컴파일러 동작에 불을 붙일 수 있습니까?

#include <iostream> 
using namespace std; 

int frwd(int aa) { return aa; } 

int main() { 
    int xx = 0; 
    xx = (xx++); 
    cout << "xx:" << xx << endl; 

    int zz = 0; 
    zz = frwd(zz++); 
    cout << "zz:" << zz << endl; 
} 
+0

완전한 설명 : [정의되지 않은 동작 및 순서 포인트] (http://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points) –

답변

1

정의되지 않은 동작은 정의되지 않았습니다. 어떤 일이든 일어날 수있다. 귀하의 질문은 여러 번 반복됩니다.

+0

Jon Skeet이 대답하지 않는 한 1 백만 명의 담당자가됩니다. 질문 : p – Matthias