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

[C언어][Error] 075. jump to label crosses initialization – 초기화 전 레이블 점프

about_IT 2025. 5. 2. 20:41

이 오류는 goto 문으로 점프하는 위치가 변수의 초기화 이후로 지정되었을 때 발생합니다. C언어에서는 변수 초기화가 수행되기 전에 해당 지점으로 점프할 경우, 해당 변수는 초기화되지 않은 상태로 접근될 수 있으므로 컴파일러는 이를 문법 오류로 처리합니다.


이는 프로그램의 안전성과 예측 가능한 실행 흐름을 보장하기 위한 규칙으로, 특히 지역 변수의 초기화가 중요한 경우 자주 발생합니다.



● 오류 예제

#include <stdio.h>

int main() {
    goto skip;
    int x = 10;  // 오류: 초기화 전에 jump 발생
skip:
    printf("x는 초기화되지 않음\n");
    return 0;
}

컴파일 시 다음과 같은 오류 메시지를 출력합니다.

error: jump to label crosses initialization of ‘x’


● 해결 방법

점프 위치 이전에 초기화되는 변수를 블록으로 감싸거나, 변수 선언을 점프 이후로 이동시키는 방식으로 해결할 수 있습니다.

#include <stdio.h>

int main() {
    int x;
    goto skip;

    x = 10;
skip:
    x = 20;
    printf("%d\n", x);
    return 0;
}

출력 결과:

20


● 실전 팁

  • goto 문을 사용할 경우 변수 초기화 전후 위치를 반드시 검토하세요.
  • 점프가 변수 초기화를 건너뛰지 않도록 변수 선언과 goto 순서를 조정하세요.
  • 가급적 goto 대신 반복문이나 조건문을 사용하는 것이 구조적인 코드에 유리합니다.

초기화 전 점프는 프로그램의 예측 불가능한 동작을 유발할 수 있으므로, 반드시 변수 선언과 goto 위치를 신중히 조정하여 안전한 코드 흐름을 유지하세요.