reinterpret_cast 형변환?

nayana의 이미지

      1 #include <iostream>
      2
      3 using std::cout;
      4 using std::endl;
      5
      6 void func( void* v )
      7 {
      8     int i = reinterpret_cast< int >( v );
      9     cout << i << endl;
     10 }
     11
     12 int main ( void )
     13 {
     14     func( reinterpret_cast< void* >( 5 ) );
     15
     16     typedef void (* PFV )();
     17     PFV pfunc = reinterpret_cast< PFV >( func );
     18
     19     pfunc();
     20
     21     return 0;
     22 }

결과가
5
1
이 나옵니다. 5가 나온이유를 알겠는데...1은 어떻게 나오는거죠?

doldori의 이미지

우연히요. (농담 아닙니다.)
이 코드는 정의되지 않은 행동을 유발하므로 어떠한 결과라도 나올 수 있습니다.

nayana의 이미지

현재 FC3 에서 실행 하였습니다.
버전은 gcc version 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)
입니다. 여기에서 는 1이라는 결과가 나오고
vc++ 6.0 에서는 -1이라는 결과가 나옵니다.

Quote:
어떠한 결과라도 나올 수 있습니다.

어떠핳ㄴ 결과라도 나올수 있다는 얘기는 컴파일러마다 틀리다는 얘기 인가요 ? 아니면 실행할때마다 틀리다는 얘기 인가요?
doldori의 이미지

컴파일러, 플랫폼, 심지어는 그날 운수에 따라 달라진다고 봐도 무방합니다.
말 그대로 "정의되지 않"습니다.

nayana의 이미지

넵...감사합니다.