프로그래밍언어/C언어[Error]
[C언어][Error] 032. case label does not reduce to an integer constant – case 레이블이 상수 표현식이 아님
about_IT
2025. 4. 27. 16:59
728x90
이 오류는 switch
문 내부의 case
라벨이 컴파일 시간에 결정될 수 없는 상수가 아닐 때 발생합니다. C언어에서 case
에는 반드시 컴파일 타임에 계산 가능한 정수 상수 표현식만 사용할 수 있습니다.
즉, 변수나 함수의 반환값 등 런타임에 결정되는 값은 사용할 수 없으며, 리터럴 상수, #define
매크로, enum
상수 등만 사용할 수 있습니다.
● 오류 예제
#include <stdio.h>
int main() {
int x = 2;
int n = 1;
switch (x) {
case n: // 오류 발생: 변수는 상수가 아님
printf("One\n");
break;
}
return 0;
}
컴파일러는 다음과 같은 오류를 출력합니다.
error: case label does not reduce to an integer constant
● 해결 방법
case
라벨에 사용할 값은 반드시 상수여야 하며, #define
또는 enum
등을 사용하는 것이 좋습니다.
#include <stdio.h>
#define ONE 1
int main() {
int x = 2;
switch (x) {
case ONE:
printf("One\n");
break;
case 2:
printf("Two\n");
break;
}
return 0;
}
출력 결과:
Two
● 실전 팁
case
에는 변수나 실행 시간에 결정되는 값을 사용할 수 없습니다.- 정수 상수만 허용되며, 매크로나 enum 상수를 통해 명확히 표현하세요.
- switch 문은 컴파일러가 case 값을 미리 계산할 수 있도록 작성되어야 합니다.
case 레이블의 값은 반드시 상수여야 하며, 변수나 함수 결과를 사용하려는 경우는 문법적으로 허용되지 않습니다. 명확하고 안전한 switch-case 구문을 작성하려면 상수 표현식을 적절히 활용해야 합니다.
반응형