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
[17037] Re:[질문] 예외 처리 문제
개박살.U&I [inutero] 1047 읽음    2002-03-29 17:26

안녕하세요? 개박살입니다.

저랑 같은 고민을 하셨군요 ^^; 저도 알아낸것이지만요

결론은, x86 CPU의 부동소수점 유닛은 x87특성상 Float연산의 상태를 공유하기 때문에

그것을 Clear해주어야만 한다.. 라고 알고 있습니다. (정확한건 묻지마셈 ^^)

방법은,

#include <float.h> // 먼저 걸고요
_fpreset();        // 요놈을 써서 클리어해주면 됩답니다.

    try {
        _fpreset();
        ShowMessage(IntToStr(a/b));
    }

요렇게 한번 해보세요

그럼 참고하세요~



계동원 님이 쓰신 글 :
: : : : : : :
void __fastcall TBaseWindow::Button1Click(TObject *Sender)
:
{
:
     int a,b;
:
     a = 5 ;
:
     b = 0 ;
:
 
:
     try {
:
         : ShowMessage(IntToStr(a/b));
:
     }
:
     catch (...)
:
     {
:
         ShowMessage("Exception");
:
     }   
:
}
:
 
:
실행 파일 탐색기에서 실행시켜서 테스트해봐도...
:
(즉, F9 로 빌더 내에서 실행한것이 아닙니다)
:
 
:
예외 처리가 되지 않고, Division by Zero 라는 에러가 뜹니다.
:
 
:
그러나, Debug 모드로 컴파일에서 실행 파일을 실행 시켜보면,
:
제대로 "Exception" 이라는 메세지가 뜹니다. (예외 처리 성공)
:
 
:
(꼭 풀디버그 모드 아니라도, Disable inline expansions 에
:
체크가 되어 있으면 제대로 예외 처리 됩니다)
:
 
:
또 웃긴 것은
:
 
:
try {
:
 
:
}  안에 
:
 
:
int a = 5; 
:
int b = 0;   를 선언하면 '릴리즈' 모드에서도 문제가 없이 예외 처리 됩니다.
:
 
:
 
:
도대체 왜~!?
:
 
:
이런 현상이 생기는 걸까요?
:
 
:
아악. 고통스럽습니다. 짐작가시는 분 좀 조언 부탁드립니다.
:
 
:
 
:
 
: :
:

+ -

관련 글 리스트
17031 [질문] 예외 처리 문제 계동원 942 2002/03/29
17037     Re:[질문] 예외 처리 문제 개박살.U&I 1047 2002/03/29
17046         Re: 정말 감사드리구요, 한가지만 더... 계동원 895 2002/03/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.