最初の回答のリンクは、古い方法について説明しています。Fortran への ISO C バインディングの追加により、C から Fortran を呼び出すこと、または Fortran から C を呼び出すことがはるかに簡単になりました。この Fortran 言語機能を使用すると、C とバイナリ互換性のある実行可能コードを生成するように Fortran コンパイラに指示されます。プログラマは接続を「ハック」する必要はありません。接続は言語の一部であるため、コンパイラとプラットフォームに依存しません。技術的には、ISO C Binding は Fortran 2003 の一部ですが、バージョン 4.3 以降の gfortran や Intel ifort など、多数のコンパイラで数年間利用できます。
Fortran サブルーチンまたは関数を C から呼び出すには、Fortran サブルーチンまたは関数を bind C オプションで宣言し、バインディングで提供される C 互換の型を引数の宣言に使用します。gfortran マニュアルの「Mixed Language Programming」の下に例があります。ISO C バインディングは言語の一部であるため、マニュアルのこのセクションはほとんどコンパイラに依存しません。ここの Stack Overflow や Web 上の他の場所の以前の回答には、他の例があります。
以下は、C から呼び出されるサブルーチンの Fortran サブルーチン宣言の簡単なコード フラグメント (未テスト) です。
subroutine test ( varint1, varflt2 ) bind ( C, name="MyTest" )
use iso_c_binding
integer (kind=c_int32_t), intent (in) :: varint1
real (kind=c_float), intent (out) :: varflt2
バインド C 名 "MyTest" は Fortran 名をオーバーライドします。Fortran とは異なり、大文字と小文字が区別されます。アンダースコアを気にする必要はありません。変数の型は明らかなはずです...利用可能なものについては、gfortranのマニュアルまたは他の場所を参照してください。