2012-05-10 16 views
4

我正試圖編寫一個程序,該程序將在執行無效操作時停止,無論它如何與GFortran一起編譯。用ifort我可以這樣做:GFortran相當於ieee_exceptions

use ieee_exceptions 
.... 
logical  :: halt 
.... 
call ieee_get_halting_mode(IEEE_USUAL,halt) 
call ieee_set_halting_mode(IEEE_USUAL,.True.) 
.... 
! Something that may stop the program 
.... 
call ieee_set_halting_mode(IEEE_USUAL,halt)  

GFortran有一個模塊類似於ifort的ieee_exceptions嗎?或者更好的方法是在不知道如何編譯程序或將使用哪種編譯器的情況下停止暫停模式?

回答

7

從GCC 5版本開始,GFortran支持ieee_exceptions模塊。

如果您遇到較舊的GFortran發行版,解決方法是在C/asm中實現獲取/設置FP陷印狀態寄存器並從Fortran中調用這些寄存器的函數。

PS .: GFortran確實有一個開關(-fpe-trap)用於全局啓用FP異常陷阱,請參閱http://gcc.gnu.org/onlinedocs/gfortran/Debugging-Options.html。但是,既然你明確地說過,「不管它是如何用gfortran編譯的」,我猜你不想使用它。

+0

乾杯,現貨。 – SimpleSimon

+1

實際上,這似乎是gfortran 5的一部分:https://gcc.gnu.org/wiki/GFortran/News#gfortran_5 – patrickvacek

+0

@patrickvacek:的確如此。好極了!我已經更新了答案。 – janneb