インテル® Fortran コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
Fortran と C/C++ 言語が混在したプログラミングには、重要な相違点があります。例えば、プログラムが実行に失敗したり、誤った結果を生成することを防ぐには、どの 2 つの言語間でも、引数渡し、命名規則、その他のインターフェイス関連の問題を慎重に、また、一貫性のある形で調整しなければなりません。しかし、言語が混在したプログラミングには、一般にこの余分な作業を行うに足る利点があります。
Fortran と C/C++ が混在したプログラミングのまとめは次のとおりです。
一般に、Fortran と C が混在したプログラムは、一方の言語で記述された既存のコードを使用することを目的に作成されます。Fortran と C は互いのルーチンを呼び出すことができるので、メインルーチンはどちらの言語でも記述することができます。Linux* および macOS* システムでは、メインルーチンが Fortran でない場合、アプリケーションをリンクする ifort コマンドラインで -nofor-main コンパイラー・オプションを指定する必要があります。
メインプログラムが Fortran で記述されている場合、Fortran コンパイラーは Fortran ランタイム・ライブラリー (RTL) を初期化するために必要なコードを自動的に作成します。RTL は、入力/出力と例外処理用の Fortran 環境を提供します。メインプログラムが C/C++ で記述されている場合、メインプログラムで for_rtl_init_を呼び出して Fortran を初期化する必要があります。また、メインプログラムの最後で for_rtl_finish_ を呼び出して Fortran RTL をシャットダウンする必要があります。Fortran RTL を初期化すると、C/C++ ルーチンが呼び出された場合でも Fortran の I/O とエラー制御は正しく動作します。
言語が混在したアプリケーションについては、適切な呼び出し規約が使用されていれば、インテル® Fortran メインプログラムは C/C++ で記述されたサブプログラムを呼び出すことができます。
複数の言語が混在したプログラムの作成に Microsoft* ビジュアル開発環境を使用する場合は、各言語で使用するビジュアル開発環境が同じバージョンでなければなりません。
Linux* および macOS* システムでは、Fortran は外部名の最後に下線を追加します。C では追加しません。
Fortran は外部名を小文字 (Linux* および macOS*) または大文字 (Windows*) に変換します。C はオリジナルの大文字・小文字をそのまま使用します。
デフォルトでは、Fortran は数値データを参照で渡します。C は値で渡します。どちらの言語も、別の方法でも指定できます。
BIND(C) 属性を使用して、一部のデフォルトの Fortran 動作を上書きすることが可能です。この方法を推奨します。ATTRIBUTES および ALIAS を使用して、デフォルトの Fortran 動作を上書きすることもできます。
Fortran サブルーチンは、C の void ルーチンに対応します。
Fortran では文字長の引き渡しが必要です。C は、文字列に続く NULL により文字長を算出できます。つまり、Fortran が文字列を C ルーチンに渡す場合、その文字列は NULL で終了しなければなりません。
"mystring"c または StringVar // CHAR(0)
COMPLEX、REAL*16、CHARACTER、派生型および ALLOCATABLE または配列データ型では、Fortran は第 1 隠れ引数を追加し関数の戻り値を格納します。
Linux* システムでは、-fexceptions オプションは、C++ 例外処理テーブルの生成を有効にし、言語が混在したアプリケーションの Fortran ルーチンが、C++ ルーチン間の例外処理に影響されないようにします。
Windows* 上での言語が混在したプログラミングのデバッグに関する詳細は、「言語が混在したプログラムのデバッグ」を参照してください。