言語が混在したプログラミングにおける呼び出し規則の調整の概要

呼び出し規則は、プログラムがルーチンをどのように呼び出すのか、引数がどのように渡されるのか、そしてルーチンの名前がどのように指定されるのかを決定します。詳細は、「言語が混在したプログラミングにおける呼び出し規則の調整」を参照してください。

単一言語のプログラムでは、すべてのルーチンでデフォルト設定が 1 つしかなく、また、インターフェイス・ブロックを含むヘッダファイルと Fortran モジュール・ファイルが、呼び出し側と呼び出される側のルーチン間で一貫性を実現するため、呼び出し規則はほぼ常に正しくなります。

言語が混在したプログラムでは、異なる言語が同じヘッダファイルを共有することはできません。このため、異なる呼び出し規則を使用する Fortran と C のルーチンをリンクすると、そのエラーは、実行時に不正な呼び出しが行われるまでは表面化しません。このような不正な呼び出しは、実行時に、プログラム内の実際の原因とは関係のなさそうな場所 (呼び出しエラーが原因で発生したメモリやスタックの破壊) で、予期しない結果や致命的なエラーを引き起こします。このため、言語が混在した呼び出しの呼び出し規則を慎重に検証する必要があります。

言語間の呼び出し規則についての説明は、外部プロシージャにのみ適用されます。内部プロシージャを、それを含むプログラム・ユニットの外から呼び出すことはできません。

呼び出し規則は、プログラミングに次の 4 つの形で影響を与えます。

  1. 呼び出し側ルーチンは、呼び出し規則を使って、別のルーチンに引数を渡す順序を決定します。呼び出されたルーチンは、呼び出し規則を使って、渡された引数を受け取る順序を決定します。Fortran では、言語が混在したインターフェイス内で INTERFACE 文を使うか、データまたは関数宣言内で指定することで、これらの規則を指定できます。C/C++ および Fortran では、どちらも引数を左から右の順序で渡します。

  2. 呼び出し側ルーチンと呼び出されたルーチンは、呼び出し規則を使って、可変長引数を渡すときのオプションを選択します。

  3. 呼び出し側ルーチンと呼び出されたルーチンは、呼び出し規則を使って、引数を値で (値渡し)、または参照で (アドレス渡し) 渡します。個々の Fortran 引数を、ATTRIBUTES オプションの VALUE または REFERENCE で指定することもできます。

  4. 呼び出し側ルーチンと呼び出されたルーチンは、呼び出し規則を使って、プロシージャ名の命名規則を設定します。ALIAS ディレクティブ (または ATTRIBUTES オプションの ALIAS) を使うと、Fortran での名前とは関係なく、任意のプロシージャ名を設定することができます。C では大文字・小文字が区別されるのに対し、Fortran では区別されないので、この機能は有用です。

「ATTRIBUTES プロパティと呼び出し規則」も参照してください。