왜 스위치 문에서는 변수를 선언할 수 없어요?
조회수 6313회
C++에서는 아무데서나 변수를 선언할 수 있는 줄 알았는데 왜 스위치 문에서는 변수를 못 선언하나요?
소스코드
switch (val)
{
case 1:
int newVal = 42;
break;
case 2:
break;
}
1 답변
-
switch-case
에서 케이스를 지정하는 건label
을 설정하는 것이고 이label
은 컴파일러가val
과 대응하는label
로 점프하기 위해 쓰입니다.위 코드의 문제는
{}
이 스위치 문 안에 있는 모든 코드를 하나의 scope로 묶은 것에서 시작됩니다. 블록이 시작되면 지역 변수를 위한 공간이 메모리에 할당되는데, 위의 코드에서는val
이1
이 아닐 경우newVal
을 초기화하는 부분이 실행되지 않는 문제가 발생해 에러가 발생합니다.이건 스위치 문 안에
{}
가 하나밖에 없어서 생긴 문제이므로 케이스마다 scope를 지정해주면 스위치 문 안에서 변수를 선언할 수 있습니다switch (val) { case 1: { int newVal = 42; break; } case 2: break; } }
댓글 입력