言語が混在したプログラミングとは、ある言語のルーチンが、別の言語の関数、プロシージャー、またはサブルーチンを呼び出すことを指します。例えば、Fortran メインプログラムから、アセンブリー言語でプログラムされた特定のタスクを実行する場合や、既存の共有ライブラリーやシステム・プロシージャーを呼び出すような場合です。
言語が混在したプログラミングは、インテル® Fortran、Visual C/C++*、およびインテル® C++ で可能です。これは、これらの言語が、関数、サブルーチン、およびプロシージャーをほぼ同じ方法で実装しているからです。
インテル® Fortran には、C との互換性を保持するための、いくつかの Fortran 2003 の機能が含まれています。両方の言語で対応する宣言を記述できる場合は、互換性があるとみなされます。変数、派生型、プロシージャーの互換性が提供されています。
次の機能がサポートされています。
BIND 属性および文。オブジェクトが C と互換性があること、およびオブジェクトに外部参照があることを指定します。
FUNCTION 文および SUBROUTINE 文の言語バインド
派生型文の言語バインド
詳細は、「C との互換性保持」を参照してください。
Fortran と C/C++ が混在したプログラミングの主なまとめは次のとおりです。
Fortran と C では、関数およびルーチンの実装方法が異なります。例えば、C のメインプログラムから、実際には Fortran のサブルーチンとして実装されている外部の void 関数を呼び出すことができます。
一般に、Fortran と C が混在したプログラムは、一方の言語で記述された既存のコードを使用することを目的に作成されます。Fortran と C は互いのルーチンを呼び出すことができるので、メインルーチンはどちらの言語でも記述することができます。Linux* および Mac OS* X システムでは、メインルーチンが Fortran でない場合、コマンドラインで -nofor-main コンパイラー・オプションを指定する必要があります。
複数の言語が混在したプログラムの作成に Microsoft* ビジュアル開発環境を使用する場合は、各言語で使用するビジュアル開発環境が同じバージョンでなければなりません。
Fortran は外部名に下線を追加します。C では追加しません。
Fortran は外部名を小文字に変換します。C はオリジナルの大文字・小文字をそのまま使用します。
Fortran は数値データを参照で渡します。C は値で渡します。
Fortran のデフォルト動作のいくつかは、ATTRIBUTES および ALIAS を使用して上書きできます。ATTRIBUTES C は、Fortran の外部名および数値データの引渡しで C と同じ動作をするように設定します。ALIAS は、Fortran が外部名にオリジナルの大文字・小文字を使用するように設定します。
Fortran サブルーチンは、C の void ルーチンに対応します。
Fortran では文字長の引渡しが必要です。C は、文字列に続くヌルにより文字長を算出できます。つまり、Fortran が文字列を C ルーチンに渡す場合、その文字列はヌルで終了しなければなりません。
"mystring"c または StringVar // CHAR(0)
COMPLEX、REAL*16、CHARACTER、および派生型では、Fortran は第 1 隠れ引数を追加し関数の戻り値を格納します。
Linux システムでは、-fexceptions オプションは、C++ 例外処理テーブルの生成を有効にし、言語が混在したアプリケーションの Fortran ルーチンが、C++ ルーチン間の例外処理に影響されないようにします。
インテル® Fortran および C が混在したプログラムに関する詳細は、次の関連情報を参照してください。
Fortran とアセンブリー言語のまとめは次のとおりです。
アセンブリー言語のルーチンは、Fortran や C などの高水準言語のように初期化を必要としないため、小さく、高速に動作します。
アセンブリー言語ルーチンでは、高水準言語のユーザーには使用できないハードウェア命令を参照することができます。Fortran/アセンブリー言語のプログラムでは、メインルーチンを Fortran でコンパイルすることで、アセンブリー言語のコードから Fortran の高水準プロシージャーやライブラリー関数を参照でき、同時にアセンブリー言語のルーチンを速度と効率の点で最大限にチューニングすることができます。また、メインプログラムがアセンブリー言語のプログラムであってもかまいません。
言語間には、ほかにも重要ないくつかの相違点があります。例えば、プログラムが実行に失敗したり、誤った結果を生成することを防ぐには、どの 2 つの言語間でも、引数渡し、命名規則、およびその他のインターフェイス関連の問題を慎重に、また、一貫性のある形で調整しなければなりません。しかし、言語が混在したプログラミングには、一般にこの余分な作業を行うに足る利点があります。このセクションでは、Fortran と他の言語の違いを調整するために使用できる技術について説明しています。
次に示すトピックでは、呼び出し規則の調整、命令規則の調整、およびインターフェイス・プロシージャーの作成方法について説明しています。
言語が混在したプロシージャー間で一貫性のあるインターフェイスを作成した後は、個々のデータ型 (文字列、配列など) の処理方法の違いを調整する必要があります。詳細は、「言語が混在したプログラミングにおけるデータ交換と参照」を参照してください。各言語では、データ型の扱いが異なるため、注意が必要です。詳細は、「言語が混在したプログラミングにおけるデータ型の処理」を参照してください。
このセクションでは、「ルーチン」という言葉を、各言語の関数、サブルーチン、およびプロシージャーを指す一般的な用語として使用しています。