【发布时间】:2019-10-24 09:00:51
【问题描述】:
我希望能够在 C++ 绑定中捕获终止的 Fortran 运行时错误。 我有一个旧的 F90 代码可以绑定并期望出现各种错误,例如数值、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”:没有这样的文件或目录
我希望能够使用信号捕捉这个和其他运行时错误。
【问题讨论】:
-
你说
signals是什么意思? -
信号处理(SIGTERM 或 SIGINT)
-
你为什么不直接使用
try..catch..? -
当 fortran 代码提交终止信号时,C++ 包装器会立即终止(在 catch 未捕获它之前)。我需要以某种方式抛出异常..似乎以某种方式“调用信号(SIGTERM,myfunction)”可以工作,myfunction 可以抛出异常,但我没有处理这个。
-
Fortran 有办法禁用这些错误消息,使用
iostat=说明符并检查其返回值。 Fortran 标准中没有任何内容需要编译器发出信号。它需要终止程序。
标签: c++ fortran language-binding