ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Case bypasses initialization of local variable
    C++ 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

    댓글

Designed by Tistory.