프로그래밍언어/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 구문을 작성하려면 상수 표현식을 적절히 활용해야 합니다.

반응형