[CPP] Switch scope 내 변수 초기화 error

윤동환·2024년 9월 2일
0

CPP

목록 보기
5/5

현상

 error: jump to case label [-fpermissive]

문제의 개념 : 스코프와 초기화

case 라벨은 코드 흐름의 특정 지점을 나타내며, 이 지점으로 점프할 수 있습니다.

이로 인해 해당 지점까지 도달하기 전에 변수 초기화가 이루어질 수 없게 되거나, 이미 초기화된 변수를 올바르게 사용할 수 없는 경우가 발생할 수 있습니다.

즉, case 라벨이 있는 코드 블록에서 변수를 정의하고 초기화하면, 이 변수가 case 라벨로 점프하는 다른 코드 블록에서 초기화되지 않은 상태로 사용될 수 있기 때문에 컴파일 에러가 발생했습니다.

문제 예시 코드

switch (someValue) {
    case 1:
        // 변수 선언 및 초기화
        int x = 10;
        // 변수 사용
        std::cout << x << std::endl;
        break;
    case 2:
        // x는 이 지점에서 정의되지 않았으므로 컴파일 오류 발생
        std::cout << x << std::endl;
        break;
}

문제 발생 해결을 위해선 switch scope 밖에서 변수를 선언하여 모든 case에서 해당 변수를 사용 할 수 있도록 해야합니다.

문제 해결

// 변수 선언 및 초기화
int x = 0;
switch (someValue) {
    case 1:   
        // 변수 사용
        x = 10;
        std::cout << x << std::endl;
        break;
    case 2:       
        std::cout << x << std::endl;
        break;
}

break를 걸었기 때문에 상관 없을 것이라 생각했는데...
"공부하자!"

profile
모르면 공부하고 알게되면 공유하는 개발자

0개의 댓글