インテル® Fortran コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
デフォルトでは、Fortran プログラムは引数を参照によって渡します。すなわち、Fortran プログラムは引数の値ではなく、実引数へのポインターを渡します。これに対して、通常 C プログラムは値によって引数を渡します。次の点に注意してください。
Fortran プログラムから C 関数を呼び出す場合、この C 関数の仮引数はそれぞれ適切なデータ型のポインターとして宣言されていなければなりません。
C プログラムから Fortran サブプログラムを呼び出す場合、それぞれの実引数はポインターとして明示的に指定されていなければなりません。
Fortran と C/C++ の間でデータを渡すには、個々の言語で行う場合と同じように、引数の並びを使用します (例えば、CALL MYSUB(a,b,c) では a、b、および c が引数になります)。各引数を渡す方法には 2 通りあります。
値渡し: 引数の値を渡します。
参照渡し: 引数のアドレスを渡します。IA-32 アーキテクチャー・ベースのシステムでは、Fortran、C、および C++ は 4 バイト・アドレスを使用します。インテル® 64 アーキテクチャー・ベースのシステムでは、これらの言語は 8 バイト・アドレスを使用します。
すべての呼び出しに対して、呼び出し側のプログラムと呼び出される側のルーチンで、個々の引数の渡し方が一致していることを確認する必要があります。渡し方が一致していない場合は、呼び出されたルーチンは無効なデータを受け取ることになります。
Fortran での引数の渡し方は、指定した呼び出し規約によって変わります。デフォルトでは、Fortran はすべてのデータを参照で渡します (ただし、例外として文字列型の長さの隠し引数は値で渡されます)。
IA-32 アーキテクチャー・ベースの Windows* システムの場合に限り、デフォルトの呼び出し規約を変更することができます。/iface:stdcall オプション (stdcall) または /iface:cvf オプション (Compaq* および Powerstation 互換) を使用して、デフォルトの呼び出し規約を変更するか、ATTRIBUTES ディレクティブを使用して、明示的なインターフェイス内の VALUE または C 属性を変更することができます。ATTRIBUTES ディレクティブに関する詳細は、「Intel® Fortran Language Reference」(英語) を参照してください。
これらのオプションは、コンパイルされたルーチンおよびそれが呼び出すルーチンの外部シンボル名に @<n> を追加します (n はすべての引数のバイト数を表しています)。これらのオプションは、この方法でコンパイルされた Fortran ルーチンから呼び出されるすべてのルーチンが独自にスタックのクリーンアップ "callee pops" を行うと仮定します。また、/iface:cvf は、CHARACTER 変数の渡し方を変更します。/iface:cvf を使用することで、CHARACTER 変数はアドレスと長さのペアで渡されます (すなわち /iface:mixed_str_len_arg です)。