본문 바로가기

Robotics/Software Tech.

for문의 스코프 문제

잘은 모르겠지만, for문의 변수 범위에 대한 문제인것 같네요.
MFC에서 for문을 돌릴때 말이죠..

for(int i=0;i<5;i++)
{
....
}

for(int i=0;i<4;i++)
{
...
}

VS에서 위에처럼 하면 변수 i를 중복 선언했다고 에러를 낸다는 거죠...

error C2374: 'i' : redefinition; multiple initialization


이런것을 스코프 문제라고 하나보네요.. BC++이나 GCC와 다른 점중 하나라고 합니다..
하지만, 이런걸 해결해줄 옵션이 VC6에도 있다고 하네요..

 VC에서는 for 문의 초기화 목록에서 선언한 변수가 for 문 밖에서까지 살아남는데 표준에 위배되는 것이라 gcc에서는 오류가 납니다



from DevCTutorial : for( DWORD i = 0 ~~~ ) 구문에서 DWORD i의 스코프가 표준을 따르는 것 같습니다. VS에선 DWORD i가 for문 밖의 스코프를 가지는데 반해 BC++이나 gcc는 for문 안의 스코프를 가지네요. - conaman

VS에서도 그렇게 되도록 하는 옵션이 있다고 들었습니다. 서비스팩과도 관련이 있구요.... --류광

for에 관련된 옵션은 다음과 같습니다.. Za 옵션 : VC++ 6.0에서도 사용할 수 있으며 UI 상에서는 C/C++ 탭의 Customize 항목의 "Disable language extensions" 라는 체크박스로 조정을 할수 있습니다. 이것은 ANSI C 스탠다드를 지원하기 위한겁니다..C++이 아니죠.. 따라서 아주 간단한 C++ 샘플 컴파일하는데도 에러가 납니다.

Zc:forScope 옵션 : 이건 VC++ .NET에서만 사용가능합니다. UI 상에서는 C/C++ 부분의 language 부분에 "Force Conformance In For Loop Scope" 라는 이름으로 되어 있습니다(Zc:forScope을 직접 컴파일 옵션에 추가해도 됩니다).... --?chita000


현재 Visual Studio 2008에서는 아무런 문제없이 동작합니다. 즉, 이전 vc++ 6.0에서 표준을 따르지 않던것이 가장 최신버젼은 Visual Studoi 2008에서는 이런 문제가 없어졌습니다.

'Robotics > Software Tech.' 카테고리의 다른 글

LAN을 위한 소켓 프로그래밍 #1  (0) 2007.11.17
[MFC]Log파일 만들기  (0) 2007.10.22
Visual Studio 2005 msdn 사이트  (0) 2007.09.20
MFC 샘플 소스코드  (0) 2007.09.20
메세지 펌프(Message Pump)  (0) 2007.09.08