我希望能够在 C++ 绑定(bind)中捕获终止的 Fortran 运行时错误。 我有一个遗留的 F90 代码可以绑定(bind)并期待各种错误,例如数值、IO等
我设法根据以下内容处理 STOP: Intercepting Fortran STOP from C++ 并能够在 C++ 代码中针对这种情况抛出/捕获异常。
我对“Fortran 中的信号处理”有了一些了解 https://www.sharcnet.ca/help/images/4/42/Fortran_Signal_Handling.pdf
但是我无法解决这个问题,一个 f90 fortran 的例子会很有帮助。
例如,尝试在 fortran 子例程中打开一个不存在的文件会产生运行时错误,并且 C++ 代码终止:
打开(unit=13,FILE="fnameBAD",status="old",action="read",position="rewind")
Fortran 运行时错误:无法打开文件“fnameBAD”:没有那个文件或目录
我希望能够使用信号捕获此错误和其他运行时错误。
最佳答案
这行不通,至少对于 GFortran。当 OPEN
语句失败时,GFortran 运行时库将自行关闭,只有 finally 才会生成信号。因此,当您可以在信号处理程序中捕获信号时,libgfortran 已经自行关闭(包括关闭所有打开的文件)。
正如 Vladimir F 在评论中所说,解决方案是使用 iostat=
说明符捕获 OPEN
语句中的错误。
关于c++ - 在 C++ 绑定(bind)中捕获 Fortran 运行时错误和信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56518283/