對於提出以前多次提出的問題,我表示抱歉。但是經過多次搜索之後,我意識到我可能會在C/C++中處理FPE與在Fortran中處理它們的方式之間產生根本的誤解。在混合C/Fortran代碼中捕獲浮點異常
在Fortran(確切地說是GNU fortran)中,如果想捕獲一個浮點異常(例如使用NAN),編譯器標誌-ffpe-trap = invalid會執行這個技巧。一旦違規語句被執行,就會引發浮點異常。但是,在C(GNU gcc)中,似乎並不是這種情況。更令人討厭的是(但也許並不奇怪),相同的fortran代碼在從C main調用時不會引發異常(並暫停執行),而在Fortran主程序中調用時則會執行該代碼。這似乎與使用C或gfortran連接子無關。
經過大量的搜索和閱讀,我發現fenv.h中提供了C/C++功能,它提供了處理異常的「C方式」。我看到我可以設置異常標誌,然後檢查是否有異常。我可以看到這種方法如何在異常處理的方式上提供更多的靈活性。這是在C中處理異常的「最佳實踐」方式嗎?對於科學編程(其中C通常用於調用fortran代碼)似乎很不方便,必須先了解可能發生異常的位置。
C中有沒有(簡單的)方法讓代碼在第一次出現異常時暫停?或者在C語言中的異常處理方面還有另外一個範例,那就是我沒有完全掌握?
我運行OS X. – Donna
原來'feenableexcept()'是非標準。 [這個問題的答案](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