프로그래밍언어/C언어[Error]

[C언어][Error] 021. a label can only be part of a statement and a declaration is not a statement – 선언문에서 레이블 사용 불가

about_IT 2025. 4. 24. 19:30
728x90

이 오류는 C언어에서 레이블(label)을 잘못된 위치, 특히 선언문 앞에 사용했을 때 발생합니다. C언어에서 레이블은 반드시 실행 가능한 문(statement)에만 붙일 수 있으며, 변수 선언과 같은 선언문(declaration)에는 사용할 수 없습니다.

 

레이블은 보통 goto 문과 함께 사용되며, 프로그램의 흐름을 특정 위치로 점프하게 할 때 사용됩니다. 이때 레이블이 선언문에 붙어 있으면 컴파일러가 실행 흐름을 명확히 해석할 수 없기 때문에 오류를 발생시킵니다.

 


● 오류 예제

#include <stdio.h>

int main() {
    goto label;
    label: int x = 10;  // 오류: 선언문 앞에 레이블 사용
    printf("%d\n", x);
    return 0;
}

컴파일 시 다음과 같은 오류가 발생합니다.

error: a label can only be part of a statement and a declaration is not a statement

 


● 해결 방법

레이블은 반드시 실행 가능한 문에만 붙여야 합니다. 선언문은 실행되지 않기 때문에, 변수 선언 이후에 오는 문장에 레이블을 붙이는 방식으로 수정해야 합니다.

#include <stdio.h>

int main() {
    int x;
    goto label;
    x = 10;
    label: printf("%d\n", x);
    return 0;
}

출력 결과:

10

 


● 실전 팁

  • 레이블은 반드시 실행 가능한 문(statement)에만 붙여야 합니다.
  • 변수 선언은 레이블 위치보다 먼저 하거나, 레이블 다음에 실행 문을 넣어야 합니다.
  • goto 사용은 제한적이어야 하며, 코드 가독성을 해치지 않도록 주의하세요.

 

레이블은 흐름 제어를 위한 도구이지만 문법적으로 허용된 위치에서만 사용할 수 있습니다. 특히 선언문과 실행문의 차이를 명확히 이해하는 것이 중요합니다.

728x90