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


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

소스코드

switch (val)
{
    case 1:
        int newVal = 42;
        break;
    case 2:
        break;
}
  • 2016년 01월 15일에 작성됨

조회수 311


1 답변


좋아요
0
싫어요
채택취소하기

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

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

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

switch (val)
{   
    case 1:  
    {
        int newVal = 42;  
        break;
    }
    case 2:
        break;
    }
}
  • 2016년 01월 15일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close