전에 여러 번 질문 한 것에 대해 사과드립니다. 그러나 여러 번 검색 한 결과 C/C++에서 FPE를 처리하는 방법과 Fortran에서 FPE를 처리하는 방법 사이에 근본적인 오해가있을 수 있음을 알고 있습니다.혼합 C/포트란 코드에서 부동 소수점 예외 트래핑
부동 소수점 예외 (예 : NAN 사용)를 트랩하려면 Fortran (정확하게는 GNU Fortran)에서 컴파일러 플래그 -ffpe-trap = invalid가 트릭을 수행합니다. 문제가 발생한 명령문이 실행되면 바로 부동 소수점 예외가 발생합니다.
그러나 C (GNU gcc)에서는 그렇지 않습니다. 더 성가신 (그러나 놀랄 일도 아닌) 것은 Fortran 프로그램에서 호출 할 때와 달리 C 메인에서 호출 할 때 예외를 발생시키고 실행을 중단하지 않는 동일한 포트란 코드입니다. 그리고 이것은 C 또는 gfortran 링커가 사용되는지 여부에 독립적입니다.
많이 검색하고 읽은 후 fenv.h에서 사용할 수있는 C/C++ 기능이 있으며 예외 처리의 "C 방식"을 제시합니다. 나는 예외 플래그를 설정할 수 있고 나중에 예외가 발생했는지 확인합니다. 이 접근 방식이 예외 처리 방법에 대해 한층 더 유연성을 줄 수있는 방법을 알 수 있습니다. 이것은 C에서 예외를 처리하는 "모범 사례"방법입니까? 과학 프로그래밍 (C가 Fortran 코드를 호출하는 데 자주 사용되는 경우)에서 예외가 발생하는 위치에 대한 고급 지식이 있어야하는 것은 불편한 것 같습니다.
C에서 예외의 첫 번째 모양이 멈추는 코드가 없습니까 (직접적인) 방법이 있습니까? 아니면 완전히 이해하지 못하고있는 C의 예외 처리에 관해서 또 다른 패러다임이 있습니까?
내가 뭔가'feenableexcept()를 밝혀 OS X의 – Donna
를 실행하고'비 표준입니다. [이 질문에 대한 답변] (http://stackoverflow.com/questions/247053/enabling-floating-point-interrupts-on-mac-os-x-intel)에는 몇 가지 제안 사항이 있으며 [이 블로그 게시물] (http : //philbull.wordpress.com/2012/12/09/update-floating-point-exception-handling-on-mac-os-x/)는 Linux 및 Mac OS X에서 모두 작동하는 일부 코드를 가리 킵니다. –
예, 이 게시물을 발견하고 참조 된 코드가 정확히 내가 원하는 것을 수행하는 것 같습니다.설명 된 확장이 합리적인 방법인지 여부에 대한 감각을 갖고 있습니까? – Donna