for (int i = 0; i < 1; i++)
{
}
i = 20;

회사에서 작업하다가 안 사실인데
위랑 비슷한 코드가 debug모드에서는 error가 나고 release 모드에서는 문제 없이 컴파일이 됐다.

당연히 위와 같은 코드가 안될거라고 생각했는데 찾아보니 반대였다.

'표준 동작은 for 루프의 이니셜라이저가 for 루프 후에 범위를 벗어나는 것입니다. /Za, /Ze에서 for 루프의 이니셜라이저는 지역 범위가 끝날 때까지 남아 있습니다.'

-ㅅ-;;;

int main()
{
   int i = 0;   // hidden by var with same name declared in for loop
   for (int i = 0 ; i < 3; i++ ) {}
}

워닝만 내고 잘 컴파일 된다는 -ㅅ-;;

이런 경우에 i는 0 이어야 하는지 3이어야 하는지 모호해서 저렇게 안쓰는게 좋을듯 하다.

참고 :

MSDN : VC++ for 루프 범위의 강제 규칙
MSDN : for loop statement
728x90

+ Recent posts