ATTRIBUTES プロパティー (またはオプション) の C、STDCALL (Windows* のみ)、REFERENCE、VALUE、および VARYING は、いずれもルーチンの呼び出し規則に影響を与えます。これらのプロパティーは、次のように指定することができます。
ルーチン全体に対して、C プロパティー、STDCALL プロパティー、REFERENCE プロパティー、および VARYING プロパティーを指定できます。
各引数に対して、VALUE プロパティーおよび REFERENCE プロパティーを指定できます。
デフォルトでは、Fortran はすべてのデータを参照で渡します (ただし、例外として文字列型の長さの隠し引数は値で渡されます)。C オプション (または Windows の場合は STDCALL オプション) が使用された場合は、配列以外のほとんどすべてのデータを値で渡すようにデフォルト設定が変更されます。また、呼び出し規則の C オプションおよび STDCALL オプション以外にも、引数オプションの VALUE および REFERENCE を指定することで、呼び出し規則のオプションとは関係なく、引数を値または参照で渡すことができます。配列は参照でしか渡せません。
特定の属性を持たせるように Fortran プロシージャーを宣言することにより、複数の呼び出し規則を指定できます。
また、オペレーティング・システムやアーキテクチャーとは関係なく、適切な名前の修飾を持たせるために、DECORATE オプションと ALIAS オプションを組み合わせることを推奨します。DECORATE オプションは、ALIAS で指定される外部名が、実際の呼び出しメカニズムに対応する適切なプリフィックスとポストフィックスの修飾を持たなければならないことを示します。
命名規則は次のとおりです。
先頭 (プリフィックス) に下線 (IA-32 アーキテクチャー・ベースの Windows システム)。下線なし (インテル® 64 および IA-64 アーキテクチャー・ベースの Windows システム)。
最後 (ポストフィックス) に下線 (すべての Linux* システム)
先頭と最後に下線 (すべての Mac OS* X システム)
次に例を示します。
INTERFACE SUBROUTINE MY_SUB (I) !DEC$ ATTRIBUTES C, DECORATE, ALIAS:'My_Sub' :: MY_SUB INTEGER I END SUBROUTINE MY_SUB END INTERFACE
このコードは、MY_SUB という名前のサブルーチンを C プロパティーで宣言します。また、外部名は、オペレーティング・システムおよびプラットフォームの規則に基づいて修飾されます。
Fortran の一般的な呼び出し規則宣言子の効果を以下の表に要約します。
引数 |
デフォルト |
C |
C、REFERENCE |
STDCALL (IA-32 アーキテクチャー・ベースの Windows システム) |
STDCALL、REFERENCE (IA-32 アーキテクチャー・ベースの Windows システム) |
---|---|---|---|---|---|
スカラー |
参照 |
値 |
参照 |
値 |
参照 |
スカラー [値] |
値 |
値 |
値 |
値 |
値 |
スカラー [参照] |
参照 |
参照 |
参照 |
参照 |
参照 |
文字列 |
参照 (Len:End または Len:Mixed) |
文字列 (1:1) |
参照 (Len:End または Len:Mixed) |
文字列 (1:1) |
文字列 (1:1) |
文字列 [値] |
エラー |
文字列 (1:1) |
文字列 (1:1) |
文字列 (1:1) |
文字列 (1:1) |
文字列 [参照] |
参照 (No Len または Len:Mixed) |
参照 (No Len) |
参照 (No Len) |
参照 (No Len) |
参照 (No Len) |
配列 |
参照 |
参照 |
参照 |
参照 |
参照 |
配列 [値] |
エラー |
エラー |
エラー |
エラー |
エラー |
配列 [参照] |
参照 |
参照 |
参照 |
参照 |
参照 |
派生型 |
参照 |
値 (サイズに依存) |
参照 |
値 (サイズに依存) |
参照 |
派生型 [値] |
値 (サイズに依存) |
値 (サイズに依存) |
値 (サイズに依存) |
値 (サイズに依存) |
値 (サイズに依存) |
派生型 [参照] |
参照 |
参照 |
参照 |
参照 |
参照 |
F90 ポインター |
記述子 |
記述子 |
記述子 |
記述子 |
記述子 |
F90 ポインター [値] |
エラー |
エラー |
エラー |
エラー |
エラー |
F90 ポインター [参照] |
記述子 |
記述子 |
記述子 |
記述子 |
記述子 |
命名規則 |
|||||
プリフィックス |
_ (IA-32 アーキテクチャー・ベースの Windows システム、すべての Mac OS X システム) none (その他のシステム) |
_ (IA-32 アーキテクチャー・ベースの Windows システム、すべての Mac OS X システム) none (その他のシステム) |
_ (IA-32 アーキテクチャー・ベースの Windows システム、すべての Mac OS X システム) none (その他のシステム) |
_ |
_ |
サフィックス |
none (Windows) _ (Linux、Mac OS X) |
none |
none |
@n |
@n |
大文字・小文字 |
大文字 |
小文字 |
小文字 |
小文字 |
小文字 |
スタック・クリーンアップ |
呼び出し元 |
呼び出し元 |
呼び出し元 |
呼び出し先 |
呼び出し先 |
上の表で使用されている用語の意味は以下のとおりです。
下の表に、他言語の呼び出し規則に対応する ATTRIBUTES オプションを示します。
他言語の呼び出し規則 |
対応する ATTRIBUTES オプション |
---|---|
C/C++ cdecl (デフォルト) |
C |
C/C++ __stdcall (Windows のみ) |
STDCALL |
MASM C (PROTO 宣言および PROC 宣言) (Windows のみ) |
C |
MASM STDCALL (PROTO 宣言および PROC 宣言) (Windows のみ) |
STDCALL |
アセンブリー (Linux のみ) |
C |
ALIAS オプションをほかの Fortran 呼び出し規則オプションとともに使用することで、名前に含まれる大文字・小文字をそのまま維持できます。また、DECORATE オプションを ALIAS オプションと組み合わせることにより、実際に呼び出しメカニズムと関係付けるために、ALIAS で使用される外部名にプリフィックスとポストフィックスの修飾を持たせるように指定できます。
Windows システムでは、コンパイラー・オプションの /iface を使用することで、デフォルトの引数渡し規則を設定できます。/iface には、次のオプションがあります。