int a{0};
switch (a)
{
case __LINE__: // error C2131, error C2051
a = 1;
break;
case __LINE__:
a = 2;
break;
default:
break;
}
'__LINE__' 매크로를 case 와 사용하면 아래와 같은 컴파일 오류가 뜬다.
1> ConsoleApplicationTest.cpp(12,10): error C2131: 식이 상수로 계산되지 않았습니다.
1> ConsoleApplicationTest.cpp(12,10): message : 비상수 인수 또는 비상수 기호를 참조하여 실패했습니다.
1> ConsoleApplicationTest.cpp(12,10): message : '__LINE__Var' 사용량 참조
1> ConsoleApplicationTest.cpp(15,10): error C2131: 식이 상수로 계산되지 않았습니다.
1> ConsoleApplicationTest.cpp(15,10): message : 비상수 인수 또는 비상수 기호를 참조하여 실패했습니다.
1> ConsoleApplicationTest.cpp(15,10): message : '__LINE__Var' 사용량 참조
1> ConsoleApplicationTest.cpp(12,1): error C2051: case 식이 상수가 아닙니다.
1> ConsoleApplicationTest.cpp(15,1): error C2051: case 식이 상수가 아닙니다.
릴리즈로 빌드할 때는 오류가 발생하지 않는데 디버그로 빌드할 때만 오류가 발생했다.
검색해보니 '디버그 정보 형식'이 '편집하며 계속하기 프로그램 데이터베이스(/ZI)' 를 사용 중이면 __LINE__ 이 숫자값이 아니게 된다고 한다.
위와 같이 'case __LINE__' 같은 식으로 사용하고 싶으면 '디버그 정보 형식'을 다른 값으로 바꿔 사용해야 했다.
728x90