C++ Builder/Debug_Info

Case bypasses initialization of local variable

딸기우유중독 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