3

C++ バインディングで終了する Fortran ランタイム エラーをキャッチできるようにしたいと考えています。バインドするレガシー F90 コードがあり、数値、IO などのあらゆる種類のエラーが予想されます。

Intercepting Fortran STOP from C++ and can throw/catch for this case in the C++ code.に従って STOP を処理する ことができました。

https://www.sharcnet.ca/help/images/4/42/Fortran_Signal_Handling.pdfで「Fortran でのシグナル処理」についてある程度理解しました 。

しかし、私はこれを管理していません.f90 fortranの例は非常に役に立ちます.

たとえば、fortran サブルーチンで存在しないファイルを開こうとすると、実行時エラーが発生し、C++ コードが終了します。

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

Fortran ランタイム エラー: ファイル 'fnameBAD' を開けません: そのようなファイルまたはディレクトリはありません

シグナルを使用して、このエラーやその他の実行時エラーをキャッチできるようにしたいと考えています。

4

2 に答える 2

2

これは、少なくとも GFortran では機能しません。thenOPENステートメントが失敗すると、GFortran ランタイム ライブラリはシャットダウンし、最後にシグナルが生成されます。そのため、シグナル ハンドラーでシグナルをキャッチできるようになるまでに、libgfortran は既にシャットダウンしています (開いているすべてのファイルを閉じることを含む)。

Vladimir F がコメントで述べているように、解決策は、指定子を使用してOPENステートメントのエラーをキャッチすることです。iostat=

于 2019-06-10T12:50:26.453 に答える