首页 > 解决方案 > 在 C++ 绑定中捕获 fortran 运行时错误和信号

问题描述

我希望能够在 C++ 绑定中捕获终止的 Fortran 运行时错误。我有一个旧的 F90 代码可以绑定并期待各种错误,例如数字、IO 等。

我设法根据以下内容处理 STOP: Intercepting Fortran STOP from C++ and able to throw/catch exception for this case in the C++ code。

我在 https://www.sharcnet.ca/help/images/4/42/Fortran_Signal_Handling.pdf对“Fortran 中的信号处理”有了一些了解

但是,我无法解决这个问题,f90 fortran 的示例将非常有帮助。

例如,尝试在 fortran 子例程中打开一个不存在的文件会产生运行时错误,并且 C++ 代码会终止:

打开 (unit=13,FILE="fnameBAD",status="old",action="read",position="rewind")

Fortran 运行时错误:无法打开文件“fnameBAD”:没有这样的文件或目录

我希望能够使用信号捕获这个和其他运行时错误。

标签: c++fortranlanguage-binding

解决方案


这行不通,至少对 GFortran 来说是这样。当 thenOPEN语句失败时,GFortran 运行时库将自行关闭,并且仅在最后生成信号。因此,当您可以在信号处理程序中捕获信号时,libgfortran 已经自行关闭(包括关闭所有打开的文件)。

正如 Vladimir F 在评论中所说,解决方案是使用说明符捕获OPEN语句中的错误iostat=


推荐阅读