switch-case 문 내에서의 local variable 선언 문제
다음과 같은 코드가 있다고 가정 해 보자
void printVal(int val)
{
printf("value : %d", val);
}
int main(void)
{
int val = 0;
switch(val) {
case 0:
int newVal = 10;
printVal(newVal);
break;
case 1:
pritVal(val);
break;
}
return 0;
}
이 코드는 다음과 같은 에러 메시지를 발생시킬 것이다
initialization of 'newVal' is skipped by 'case' label
그렇다면 이러한 에러 메시지가 발생하는 이유를 살펴보자
-
C
문제점:- case문을 만나게되면 이에 해당하는 Label로 jump하게 됨.
- 하지만
int newVal = 10;
이 부분은 statement가 아니어서 jump 하고자 하는 Label이 될 수 없음 case 0
이후의 문장들을{ ... }
로 묶어주게 되면 이는 compound statement로 인지되어 jump 가능한 Label이 됨
-
C++
문제점- C++에서는 variable들은 initialization이 우선 수행되어야 한다.
case 1
을 만나게 되는 상태에서의 scope에는 newVal이 존재하고 이는case 0
에서 initialization 되므로 현재 initialization이 되어있지 않은 상태이다.- 각 case 문들을
{ ... }
로 묶어주게되면 각각의 scope를 분리시키게 되므로 uninitialization 문제가 발생되지 않는다.
참조: https://stackoverflow.com/questions/92396/why-cant-variables-be-declared-in-a-switch-statement
'개발언어 > C++' 카테고리의 다른 글
문자열 리터럴: char* vs char [] (0) | 2020.08.25 |
---|---|
String class 멤버함수 c_str()에서의 주의점 (0) | 2020.08.10 |
decltype(auto) vs auto (0) | 2020.08.04 |