-
Case bypasses initialization of local variableC++ Builder/Debug_Info 2019. 1. 17. 14:03
Error: Case bypasses initialization of local variable
switch(조건변수)
{
case 1:
int i=0;
...
break;
case 2:
...
break;
}
이와 같은 경우에, 조건변수값이 만약 2인 경우라면 case 1에서 선언하는 int i=0; 라인을 그냥 지나치게 됩니다. 그런데 C++에서 모든 변수는 블럭 내에서 선언되고 스코프를 가지게 되므로, 이 i 변수의 스코프는 switch 문 전체가 되는데, 조건에 의해 case 1 블럭을 지나치게 되므로 변수를 초기화할 수 없게 됩니다. 이 문제는 근본적으로 case 문이 goto 문의 성격을 가지고 있어 점프를 해버리기 때문에 발생하는 것입니다.
이와 같은 경우 세가지 해결책이 있을 수 있습니다.
첫번째는, 변수를 아예 switch {} 문 바깥에서 선언하고 초기화하는 것입니다. 가장 간단한 방법이지요.
두번째는 switch 문의 블럭 바로 안쪽에 선언하는 것입니다. 다음과 같이 말이죠.
switch(조건변수)
{
int i=0;
case 1:
...
break;
case 2:
...
break;
}
좀 생소한 코딩 방법이지만, 문법상으로 하자가 없으며, 실행해도 정상적으로 동작합니다.
세번째는 case문 안에서 선언하되 블럭을 설정하는 것입니다.
switch(조건변수)
{
case 1:
{
int i=0;
...
}
break;
case 2:
...
break;
}
원래 코딩의 의도를 가장 잘 살리면서 문제가 없는 방법으로서, 가장 권할 만한 방법이죠.
그럼 참고하시길...출처:http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_faq&no=21
728x90'C++ Builder > Debug_Info' 카테고리의 다른 글
Clipboard() 클립보드 함수 (0) 2020.01.24 ilink32 Error] Error: Unresolved external (0) 2019.03.04 bcc32 Error (0) 2019.02.22 socket error # 10054 (0) 2019.01.28 [ilink32 Error] Error: Unresolved external '__fastcall (0) 2019.01.22 댓글