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 식이 상수가 아닙니다.

릴리즈로 빌드할 때는 오류가 발생하지 않는데 디버그로 빌드할 때만 오류가 발생했다.

https://stackoverflow.com/questions/11461915/visual-studio-9-0-error-c2051-case-expression-not-constant

 

Visual Studio 9.0 Error C2051 Case Expression Not Constant

When I try to compile this code, I get a Case Expression Not Constant error. I can't figure out why. while ((*datalen) == 0) crReturn(NULL); //error here st->len = (st->len << 8) ...

stackoverflow.com

 

검색해보니 '디버그 정보 형식'이 '편집하며 계속하기 프로그램 데이터베이스(/ZI)' 를 사용 중이면 __LINE__ 이 숫자값이 아니게 된다고 한다.

위와 같이 'case __LINE__' 같은 식으로 사용하고 싶으면 '디버그 정보 형식'을 다른 값으로 바꿔 사용해야 했다.

728x90

+ Recent posts