왜 스위치 문에서는 변수를 선언할 수 없어요?

C++에서는 아무데서나 변수를 선언할 수 있는 줄 알았는데 왜 스위치 문에서는 변수를 못 선언하나요?

소스코드

switch (val)
{
    case 1:
        int newVal = 42;
        break;
    case 2:
        break;
}

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    switch-case에서 케이스를 지정하는 건 label을 설정하는 것이고 이 label은 컴파일러가 val과 대응하는 label로 점프하기 위해 쓰입니다.

    위 코드의 문제는 {}이 스위치 문 안에 있는 모든 코드를 하나의 scope로 묶은 것에서 시작됩니다. 블록이 시작되면 지역 변수를 위한 공간이 메모리에 할당되는데, 위의 코드에서는 val1이 아닐 경우 newVal을 초기화하는 부분이 실행되지 않는 문제가 발생해 에러가 발생합니다.

    이건 스위치 문 안에 {}가 하나밖에 없어서 생긴 문제이므로 케이스마다 scope를 지정해주면 스위치 문 안에서 변수를 선언할 수 있습니다

    switch (val)
    {   
        case 1:  
        {
            int newVal = 42;  
            break;
        }
        case 2:
            break;
        }
    }
    

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.