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
[59323] Re:프로그래머들 집합! 같이 생각해보기..
nansama [nansama] 1123 읽음    2009-12-03 19:27
음 예외처리는 CPU 고유의 기능입니다.
exception handler를 처리할 주소를 미리 지정 해놓고 실행중 오류가 발생하면
그 주소로 CPU가 실행 흐름을 변경 하는 것이죠,
문제는 컴파일러에 따라서 CPU 예외처리 루틴에서 가장 최근의 catch 문으로 리턴 하는 경우가 있고
예외가 발생한 다음 블럭으로 리턴 하는 경우가 있는데 빌더6은 마지막 catch 구문으로 리턴 하는 경우로 보입니다.
빌더2009 에서는 예외가 발생한 곳의 다음 블럭으로 리턴 하므로 같은 소스라도
catch 구문이 아예 실행 되지 않고 예외가 발생한  *a = 54; 의 다음 줄로 복귀 하네여
다른 VStudio 류도 그렇게 처리하는것으로 생각 됩니다.

참고로 모든 컴파일러와 언어들은 완벽하지 않습니다. 문법은 맞는데 도저히 이해 안되는 현상이
간혹 있을 수 있습니다. 다른 언어도 마찬가지구요. 그래서 C언어의 중수 이상은 어느정도 어셈블리를
할줄 압니다. 왜냐면 도저히 고급언어로는 이해안되는 문제의 해답은 어셈블리 언어적인 이해 만이
해줄수 있으니까여.. 그래서 빌더에서도 디버깅중 alt-8을 누르면 CPU 창이라고 어셈블리 구문을 볼 수 있게
만들어 놨습니다.

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 1123 2009/12/03
59294     Re:프로그래머들 집합! 같이 생각해보기.. locke 1118 2009/12/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.