gfortran警告浮点异常

时间:2012-04-18 13:47:23

标签: c exception-handling floating-point fortran gfortran

我正在使用gfortran代码。有一段时间了,我一直在用

进行编译
-ffpe-trap=zero,overflow,invalid

试图追捕一些错误。这导致我的程序立即停止执行。在某些情况下,FPE可能正常,因此标志如下:

-ffpe-warn=zero,overflow,invalid

会非常有用。 gfortran(或任何其他编译器)是否提供这样的东西?如果没有,有任何解决方法吗?我目前的想法是创建一个C函数来注册一个信号处理程序来写出警告,虽然我不知道如何去做。

1 个答案:

答案 0 :(得分:4)

我不知道遇到浮点异常的警告方式。但是gfortran和ifort都有信号处理程序。例如,请参阅signalUser and Reference Guides (warning: large PDF)的gfortran文档 英特尔Fortran编译器this page(参见有关病房的第410页)。

  

您可以通过调用signal

为信号建立以下操作之一      
      
  • 忽略指定的信号(由数字标识)。
  •   
  • 使用指定信号的默认操作,可以重置先前建立的操作。
  •   
  • 将控制从指定信号转移到接收信号的程序,由名称指定。
  •   

在您的情况下,您可能希望编写一个函数来在发生浮点异常时执行某些操作(例如打印文件名/行号),并使用上面列表中的第三个选项。

不幸的是,这不是非常便携:请查看-NDEBUG以获取各种编译器的信号处理示例。如果要

,可以在预处理器宏中包装一些代码
  • 使用多个编译器进行编译
  • 如果设置了一些预处理器标志,则
  • 仅使用信号处理例程(参见{{3}})

更新:最终,ieee_exceptions内在模块的异常处理工具将是可执行此操作的便携式方法,如高性能标记所示。