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

C++빌더 Q&A
C++Builder Programming Q&A
[59294] Re:프로그래머들 집합! 같이 생각해보기..
locke [syiware] 1118 읽음    2009-12-02 14:30
다른분이 테스트해보셨는데...vc 2005, 볼랜드 c++컴파일러 5.5.1에서는 이러한 현상이 없습니다. 한번 오류내고 빠진다는... c빌더에서 이런 현상이 난다면 델파이쪽도 비슷할거 같은데요. 어차피 씨빌더는 내부적으로 파스칼로 변환되어 처리되므로.. 같은 버그가 있을거 같습니다. -locke

locke 님이 쓰신 글 :
: 안녕하세요. 로크(locke)입니다.
:
: c빌더로 업무개발중 아래와 비슷한 코딩을 하게되었습니다. (c빌더 6입니다)
:
: 일단 아래를 봐주세요.
:
: while(true)
: {
:   try
:   {
:     break;
:   } catch(Exception &e)
:   {
:     ShowMessage("Error");
:   } //catch
: } //while
: int *a = null;
: *a = 54; <-오류 나는 부분(이해를 쉽게하기위해 인위적으로 오류 발생)
:
: while루프안에 try-catch블럭이 있는데
: try블럭안에서 break로 루프를 탈출합니다.
: 루프밖에서 연산오류가 발생하면 루프안의 catch(exception handler)로 프로세스가 이동하여 "Error"라는 오류창을 띄워줍니다.
: 고로 이 프로그램은 오류창 확인해주면 또 오류나고 무한루프가 되어버립니다.
:
: 어떤 한 블럭안에서 오류가 나면 c++컴파일러는 그것을 처리할 수 있는 이벤트 핸들러를 찾아서 넘겨주고
: 그게 없으면 어플리케이션 오류를 발생시킬텐데
: 위의 예제를 보면..약간 좀 아이러니합니다.
: 제가 가만히 생각해보니 try문을 만날때 사용자의 이벤트 핸들러(=catch)를 스택상에 -이미 오류나면 분기할 부분을- 저장하고 있다가 루프안에서 break로 그 블럭을 빠져나올 때
: 오류시 분기부분을 스택에서 해제하지 않았고 그 이유로 블럭밖에서 오류가 났음에도 불구하고
: 해당 이벤트 핸들러로 정의된 catch문으로 분기를 하는것 같습니다.
: 이거 c++빌더 컴파일러의 버그일지? 아니면 c++랭귀지는 모두 다 이렇게 되는건지..
: 다른 분들은 어떻게 생각하시나요? 여지껏 코딩하면서 이런 경우는 처음 봅니다.
: -locke

+ -

관련 글 리스트
59293 프로그래머들 집합! 같이 생각해보기.. locke 1090 2009/12/02
59323     Re:프로그래머들 집합! 같이 생각해보기.. nansama 1124 2009/12/03
59294     Re:프로그래머들 집합! 같이 생각해보기.. locke 1118 2009/12/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.