C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[1035] 코드 블럭을 break; 문으로 탈출하기.
김태선 [cppbuilder] 16823 읽음    2011-02-18 20:37
코딩 하다 보면 아래처럼 조건에 따라 다음 코드 블럭으로,
실행(인스트럭션) 포인트를 옮기고 싶을 때가 있습니다.

보통은 if (...) { } else { } 써서 해결하는데,
이 조건이 여러번 겹치면 블럭 겹침과 인덴트가 심해서
코드를 한눈에 보는데 조금 피로하게 됩니다.
그냥 한눈에 쉽게 보이면 좋을텐데요.
로직이 그렇게 복잡하지 않는데 if else 문을 계속 겹쳐서 쓰면 동작 파악에 시간이 걸리게 마련이죠.

그럴때 효자 노릇을 하는게 goto 문이죠.
C/C++등 여러 언어에는 블럭 탈출문 자체가 없으니 goto 문을 활용합니다.
{
    {
        int c;
        if (c == OK_1)
            if (c == OK_3)
                goto Next;
        code1();
        if (c == OK_2)
            goto Next;
        code2();
        ;
        // 등등
        ;
    Next:
    }
    NextCode();
}
위와 같은 방법으로 코드 블럭을 탈출하면 되는데,
흠 잡을 것 없는 완벽한 코드입니다만, 오랫동안 goto문을 안써 버릇해서 그런지 웬지 이상해 보입니다.
그럴때 goto 안 쓰고 블럭을 탈출하는 방법입니다.

{
    do
    {
        int c;
        if (c == OK_1)
            break;
        code1();
        if (c == OK_2)
            break;
        code2();
        ;
        // 등등
        ;
    } while(false);  <-- false이니 여기에 도달하면 바로 아래로 실행이 옮겨갑니다.
    NextCode();
}

do while(false) 문을 이용하는 방법이죠.
do
{

} while(false);
while(false) 는 루프를 돌지 않고 그냥 다음으로 실행 포인트를 옮기기 때문에
do while(false)문은 사실상 그냥 break와 continue가 먹는 코드 블럭과 다를게 없죠.

goto 문 보다는 이쪽이 아무래도 프로그래머들에게 심리적 안정을 가져다 줄것 같군요.


특별한 팁도 아니고 그렇다고 무슨 꼼수도 아니고,
가르쳐 주지 않아도 누구나 생각하고 누구나 쓰는 것이지만,
초중급이 이걸 깨닫기 까지 오랜 시간이 걸린다는 사실을 감안해서 올려 봅니다. 


그럼.

+ -

관련 글 리스트
1035 코드 블럭을 break; 문으로 탈출하기. 김태선 16823 2011/02/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.