ATTRIBUTES プロパティ (またはオプション) の C、REFERENCE、VALUE、および VARYING は、いずれもルーチンの呼び出し規則に影響を与えます。これらのプロパティは,次のように指定することができます:
ルーチン全体に対して、C プロパティ、REFERENCE プロパティ、および VARYING プロパティを指定できます。
各引数に対して、VALUE プロパティおよび REFERENCE プロパティを指定できます。
デフォルトでは、Fortran はすべてのデータを参照で渡します (ただし、例外として文字列の隠された文字長引数は値で渡されます)。C プロパティが使用された場合は、配列以外のほとんどすべてのデータを値で渡すようにデフォルト設定が変更されます。また、呼び出し規則の C プロパティ以外にも、引数プロパティの VALUE および REFERENCE を指定することで、呼び出し規則のプロパティとは無関係に、引数を値または参照で渡すことができます。配列は参照でしか渡せません。
Fortran プロシージャを特定の属性を持つように宣言することにより、複数の呼び出し規則を指定できます。次に例を示します:
INTERFACE
SUBROUTINE MY_SUB (I)
!DEC$ ATTRIBUTES C, ALIAS:'My_Sub_' :: MY_SUB !ia32 systems
INTEGER I END SUBROUTINE MY_SUB
END INTERFACE
このコードでは、MY_SUB
という名前のサブルーチンが C プロパティで宣言され、また、外部名 My_Sub_
が ALIAS プロパティで設定され宣言されています。
次の例では、サブルーチンが C の呼び出し規則で呼び出されるように宣言されています:
SUBROUTINE CALLED_FROM_C (A)
!DEC$ ATTRIBUTES C :: CALLED_FROM_C
INTEGER A
Fortran の一般的な呼び出し規則ディレクティブの効果を以下の表に要約します:
ATTRIBUTES プロパティの呼び出し規則
引数 |
デフォルト |
C |
C, REFERENCE |
---|---|---|---|
スカラ |
参照 |
値 |
参照 |
スカラ [値] |
値 |
値 |
値 |
スカラ [参照] |
参照 |
参照 |
参照 |
文字列 |
参照 |
文字列(1:1) |
参照 |
文字列 [値] |
エラー |
文字列(1:1) |
文字列(1:1) |
文字列 [参照] |
参照 |
参照 |
参照 |
配列 |
参照 |
参照 |
参照 |
配列 [値] |
エラー |
エラー |
エラー |
配列 [参照] |
参照 |
参照 |
参照 |
派生型 |
参照 |
値 |
参照 |
派生型 [値] |
値 |
値 |
値 |
派生型 [参照] |
参照 |
参照 |
参照 |
F90 ポインタ |
記述子 |
記述子 |
記述子 |
F90 ポインタ [値] |
エラー |
エラー |
エラー |
F90 ポインタ [参照] |
記述子 |
記述子 |
記述子 |
すべての呼び出し規則ではプロシージャ名が小文字になります。
上の表で使用されている用語の意味は以下のとおりです:
[値] |
VALUE 属性が割り当てられた引数。 |
[参照] |
REFERENCE 属性が割り当てられた引数。 |
値 |
引数の値がスタックにプッシュされます。すべての値が次の 4 バイト境界までパディングされます。 |
参照 |
IA-32 システムでは、4 バイトの引数アドレスがスタックにプッシュされます。 |
Len:End または Len:Mixed |
特定の文字列引数について次の意味を持ちます:
|
No Len または Len:Mixed |
特定の文字列引数について次の意味を持ちます:
|
No Len |
文字列引数において、呼び出されたプロシージャからは文字列長がわかりません。 |
文字列(1:1) |
文字列引数において、最初の文字が ICHAR(string(1:1)) のように INTEGER(4) に変換され、スタックに値でプッシュされます。 |
エラー |
コンパイラ・エラーを生成します。 |
記述子 |
IA-32 システムでは、配列記述子の 4 バイト・アドレスです。 |
サイズに依存 |
IA-32 システムでは、値で指定される派生型引数は次のように渡されます:
|
下の表に、他言語の呼び出し規則と一致する他の ATTRIBUTES プロパティを示します:
他言語の呼び出し規則 |
一致する ATTRIBUTES プロパティ |
C/C++ cdecl (デフォルト) |
C |
ALIAS プロパティを他の任意の Fortran 呼び出し規則プロパティとともに使用することで、名前に含まれる大文字・小文字をそのまま維持できます。また、DECORATE プロパティを ALIAS プロパティと組み合わせることにより、実際に呼び出しメカニズムと関係付けるために、ALIAS で使用される外部名にプリフィックスとポストフィックスの修飾を持たせるように指定できます。