我正在尝试编写一个程序,无论何时使用GFortran编译,无论何时执行无效操作都会停止。有了ifort,我可以这样做:
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
的模块吗?或者更好的是有没有办法停止停止模式而不知道程序将如何编译或将使用哪个编译器?
答案 0 :(得分: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编译”,我猜你不想用它。