C++의 표준에 따르면 for문의 초기화 파트에서 생성된 변수의 scope는 for문을 벗어나지 않는다[REF.1]. 즉,
for( int i = 0; 0; );
일때의 i는 for 문 밖에서 사용될수 없다. 일반적인(?) 컴파일러는 당연히 이것을 지킨다. 문제는 Visual C++ 이다.
일반적인 컴파일러는
for( int i = 0; 0; );
for( int i = 0; 0; );
이게 가능한반면, VC++에서는 에러가 난다(허허허
). 문제는 하나 더 있다. 마찬가지로 VC++에서 다음과 같이 작성한 코딩은 다른 컴파일러에서 에러가 날 수 있다(예를 들면 표준을 잘 지킨 C++Builder).
for( int i = 0; 0; );
for( i = 0; 0; );
왜냐! VC++에서 i 는 이미 위의 for문에서 그 scope가 끝났기 때문에 for문을 벗어나면 그 변수는 사용할 수 없다. 근데밑에서 사용했기 때문이다. VC++에서 자주 사용될 수 있는 방법인데, 표준을 지킨 다른 컴파일러에서는 불가능한 부분이다.
이 것을 해결하여 VC++에서 사용하면서 C++ 표준을 지키려면 몇가지 방법이다. 일단 C 처럼 int i 를 for문 밖으로끄집어내어 사용하여, scope를 아에 늘리는 방법. 또 하나는 다음과 같이 {} 로 묶어주는 방법이다[REF.2].
for( int i = 0; 0; );
{ for( int i = 0; 0; ); }
이 얼마나 쓸때 없는 짓인가, VC++의 비표준성 때문에 생기는 어쩔 수 없는 현상이다.
그럼 .NET 은 어떠한가! .NET 2003 에서는 위에 제시한 두가지 모두를 사용할 수 있다.(-_-;
). 물론 이것 또한 표준과는 다르긴 하지만 적어도 표준을 지키는 코드와 마찰은 일어나지 않는다. 다행이긴 하지만, 역시나 VC++ 6.0 과의 포팅을 위한 어거지라고 밖에 볼 수 없다.
하지만 이것은 .NET 2005 에서는 표준으로 최종 수정되었다. (즉, VC++ 6.0 처럼 짜면 에러가 난다.)
*REF.1 : "6.3.3.1 Intialization," The C++ Programming Language - SE
*REF.2 : "Writing Portable Code in C++ — Variable Scope," http://www.codeguru.com/Cpp/Cpp/cpp_mfc/portability/article.php/c4051/
for( int i = 0; 0; );
일때의 i는 for 문 밖에서 사용될수 없다. 일반적인(?) 컴파일러는 당연히 이것을 지킨다. 문제는 Visual C++ 이다.
일반적인 컴파일러는
for( int i = 0; 0; );
for( int i = 0; 0; );
이게 가능한반면, VC++에서는 에러가 난다(허허허
for( int i = 0; 0; );
for( i = 0; 0; );
왜냐! VC++에서 i 는 이미 위의 for문에서 그 scope가 끝났기 때문에 for문을 벗어나면 그 변수는 사용할 수 없다. 근데밑에서 사용했기 때문이다. VC++에서 자주 사용될 수 있는 방법인데, 표준을 지킨 다른 컴파일러에서는 불가능한 부분이다.
이 것을 해결하여 VC++에서 사용하면서 C++ 표준을 지키려면 몇가지 방법이다. 일단 C 처럼 int i 를 for문 밖으로끄집어내어 사용하여, scope를 아에 늘리는 방법. 또 하나는 다음과 같이 {} 로 묶어주는 방법이다[REF.2].
for( int i = 0; 0; );
{ for( int i = 0; 0; ); }
이 얼마나 쓸때 없는 짓인가, VC++의 비표준성 때문에 생기는 어쩔 수 없는 현상이다.
그럼 .NET 은 어떠한가! .NET 2003 에서는 위에 제시한 두가지 모두를 사용할 수 있다.(-_-;
하지만 이것은 .NET 2005 에서는 표준으로 최종 수정되었다. (즉, VC++ 6.0 처럼 짜면 에러가 난다.)
*REF.1 : "6.3.3.1 Intialization," The C++ Programming Language - SE
*REF.2 : "Writing Portable Code in C++ — Variable Scope," http://www.codeguru.com/Cpp/Cpp/cpp_mfc/portability/article.php/c4051/







461969
89
515






댓글을 달아 주세요