6

どのように 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か? または、プログラムがどのようにコンパイルされるか、またはどのコンパイラが使用されるかを知らなくても、停止モードを停止する方法はありますか?

4

1 に答える 1

9

GFortran は、GCC 5 リリースの時点で ieee_exceptions モジュールをサポートしています。

古い GFortran リリースで行き詰っている場合、回避策は C/asm に関数を実装して FP トラップ ステータス レジスタを取得/設定し、Fortran からそれらを呼び出すことです。

PS .: GFortran には、FP 例外のトラップをグローバルに有効にするためのスイッチ (-fpe-trap) があります。 http://gcc.gnu.org/onlinedocs/gfortran/Debugging-Options.htmlを参照してください。しかし、「gfortranでコンパイルしても」と明言したので、それを使いたくないのでしょう。

于 2012-05-10T20:23:14.853 に答える