2012-05-10 12 views
4

GFortranでどのようにコンパイルされていても、無効な操作が実行されるたびに停止するプログラムを作成しようとしています。ieee_exceptionsのGFortran相当

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に似たモジュールを持っていますのifortで、私はこのような何かを行うことができますか?または、プログラムがどのようにコンパイルされるか、どのコンパイラが使用されるかを知らなくても、停止モードを停止する方法はありますか?

答えて

7

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

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

PS:GFortranには、FP例外のトラップをグローバルにイネーブルにするスイッチ(-fpe-trap)があります(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