インテル® Fortran コンパイラー XE 13.1 ユーザー・リファレンス・ガイド

プロシージャー

Fortran プロシージャーが C との互換性を保持するためには、次のように、明示的なインターフェイスを使用し、BIND 属性で宣言する必要があります。

function Func(i, j, k, l, m) BIND(C)

関数の場合、その結果はスカラーで、互換性がなければなりません。

プロシージャーには、グローバルなバインディング・ラベルが関連付けられています。このラベルは、C プロセッサーで認識される名前です。デフォルトでは、Fortran の名前をすべて小文字にしたものです (必要に応じて先頭または最後に下線が追加されます)。例えば、上記の関数のバインディング・ラベルは func です。 次のように、別のバインディング・ラベルを指定することもできます。

function Func(i, j, k, l, m) BIND(C, name=’myC_Func’)

すべての仮引数に互換性がなければなりません。さらに、Fortran ルーチンでスカラー仮引数に VALUE 属性が使用されているか、C ルーチンでこれらのスカラー引数をスカラー値へのポインターとして受け取っていなければなりません。次の C 関数の呼び出しについて考えてみます。

int c_func(int x, int *y);

ここで示すように、Fortran から c_func を呼び出すためのインターフェイスでは、xVALUE 属性で渡す必要があります。 y はポインターとして受け取られるため、VALUE 属性を使用することはできません。

interface
   integer (C_INT) function C_Func(x, y) BIND(C)
     use, intrinsic :: ISO_C_BINDING
     implicit none
     integer (C_INT), value :: x
     integer (C_INT) :: y
   end function C_Func
end interface

別の方法として、y を値によって渡される C_PTR として宣言することもできます。

type (C_PTR), value :: y

このヘルプトピックについてのフィードバックを送信