インテル® Fortran コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
標準の Fortran は、適切な命名規則の適用を含め、C との互換性を保持する構文を提供します。ATTRIBUTES オプションを指定する代わりに、BIND(C) を使用して C との互換性を保持することができます。
ATTRIBUTES オプション (プロパティーとも呼ばれる) の C、STDCALL (Windows* のみ)、REFERENCE、VALUE は、いずれもルーチンの呼び出し規約に影響を与えます。これらのオプションは、次のように指定することができます。
ルーチン全体に対して、C オプション、STDCALL オプション、および REFERENCE オプションを指定できます。
各引数に対して、VALUE オプションおよび REFERENCE オプションを指定できます。
デフォルトでは、Fortran はすべてのデータを参照で渡します (ただし、例外として文字列型の長さの隠し引数は値で渡されます)。C オプション (または Windows* の場合は STDCALL オプション) が使用された場合は、配列以外のほとんどすべてのデータを値で渡すようにデフォルト設定が変更されます。また、呼び出し規約の C オプションおよび STDCALL オプション以外にも、引数オプションの VALUE および REFERENCE を指定することで、呼び出し規約のオプションとは関係なく、引数を値または参照で渡すことができます。配列は参照でしか渡せません。
特定の属性を持たせるように Fortran プロシージャーを宣言することにより、複数の呼び出し規約を指定できます。
Fortran の一般的な呼び出し規約ディレクティブの効果を以下の表に要約します。
引数 |
デフォルト |
C |
C、REFERENCE |
STDCALL |
STDCALL、REFERENCE |
---|---|---|---|---|---|
スカラー |
参照 |
値 |
参照 |
値 |
参照 |
スカラー [値] |
値 |
値 |
値 |
値 |
値 |
スカラー [参照] |
参照 |
参照 |
参照 |
参照 |
参照 |
文字列 |
参照 (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* システム、すべての macOS* システム) none (その他のシステム) |
_ (IA-32 アーキテクチャー・ベースの Windows* システム、すべての macOS* システム) none (その他のシステム) |
_ (IA-32 アーキテクチャー・ベースの Windows* システム、すべての macOS* システム) none (その他のシステム) |
_ |
_ |
サフィックス |
なし (Windows*) _ (Linux*、macOS*) |
なし |
なし |
@n |
@n |
大文字・小文字 |
大文字 (Windows*) 小文字 (Linux*、macOS*) |
小文字 |
小文字 |
小文字 |
小文字 |
スタック・ |
呼び出し元 |
呼び出し元 |
呼び出し元 |
呼び出し先 |
呼び出し先 |
上の表で使用されている用語の意味は以下のとおりです。
[値] |
VALUE 属性が割り当てられた引数。 |
[参照] |
REFERENCE 属性が割り当てられた引数。 |
値 |
引数の値がスタックにプッシュされます。すべての値が次の 4 バイト境界までパディングされます。 |
参照 |
IA-32 アーキテクチャー・ベースのシステムでは、4 バイトの引数アドレスがスタックにプッシュされます。 インテル® 64 アーキテクチャー・ベースのシステムでは、8 バイトの引数アドレスがスタックにプッシュされます。 |
Len:End または Len:Mixed |
特定の文字列引数についての意味は次のとおりです。
|
No Len または Len:Mixed |
特定の文字列引数についての意味は次のとおりです。
|
No Len |
文字列引数において、呼び出されたプロシージャーからは文字長が分かりません。 |
文字列 (1:1) |
文字列引数は、最初の文字が ICHAR(string(1:1)) のように INTEGER(4) に変換され、値がスタックにプッシュされます。 |
エラー |
コンパイラー・エラーを生成します。 |
記述子 |
IA-32 アーキテクチャー・ベースのシステムでは、配列記述子の 4 バイト・アドレスです。 インテル® 64 アーキテクチャー・ベースのシステムでは、配列記述子の 8 バイト・アドレスです。 |
@n |
IA-32 アーキテクチャー・ベースのシステムでは、引数リストに必要なバイト数 (10 進法) の前にアットマーク (@) が追加されます。 |
サイズに依存 |
IA-32 アーキテクチャー・ベースのシステムでは、値で指定される派生型引数は次のように渡されます。
|
大文字 |
プロシージャー名がすべて大文字になります。 |
小文字 |
プロシージャー名がすべて小文字になります。 |
呼び出し先 |
呼び出されたプロシージャーが、呼び出し元に返る前に、スタックから引数を削除しなければなりません。 |
呼び出し元 |
呼び出しを行ったプロシージャーが、呼び出しの完了後に、スタックから引数を削除しなければなりません。 |
C との不一致を解消するには、BIND(C,name=<string>) 属性を使用します。また、ALIAS オプションをほかの Fortran 呼び出し規約オプションとともに使用することで、名前に含まれる大文字・小文字をそのまま維持できます。+
Windows* システムでは、コンパイラー・オプションの /iface を使用することで、デフォルトの引数渡し規則を設定できます。/iface コンパイラー・オプションには、次のオプションがあります。
オプション |
引数を渡す方法 |
IA-32 アーキテクチャー・ベースのシステム上で @n を名前に追加する |
スタックのクリーンアップ |
Varargs のサポート |
---|---|---|---|---|
/iface:cref |
参照渡し |
× |
呼び出し元 |
〇 |
/iface:stdref |
参照渡し |
〇 |
呼び出し先 |
× |
/iface:default |
参照渡し |
× |
呼び出し元 |
〇 |
/iface:c |
値渡し |
× |
呼び出し元 |
〇 |
/iface:stdcall |
値渡し |
〇 |
呼び出し先 |
× |
/iface:cvf |
参照渡し |
〇 |
呼び出し先 |
× |
Windows* システム: Windows* GUI (グラフィカル・ユーザー・インターフェイス) を使用する場合、または API を呼び出す場合には、一般的に STDCALL を使用します。