Fortran コンパイラは、通常、入口定義と呼び出しの両方に現れる副プログラムの名前に下線 (_) を追加します。これによって、ユーザー割り当て名が同じである C の手続きや外部変数と区別します。Fortran ライブラリのほとんどすべての手続き名には、ユーザーが割り当てるサブルーチンとの競合を減らすため、先頭に 2 つの下線が付けられています。
下線に関する問題には、一般に次の 3 つの解決策があります。
C の関数で、下線を追加して関数名を変更する。
f95 の -ext_names オプションを使用して、下線を使用しないで外部名への参照をコンパイルする。
これらの中のいずれか 1 つを使用してください。
この章の例は、BIND(C) 属性宣言を使用して、下線をなくしています。 BIND(C) は、C の外部関数が Fortran から呼び出し可能なこと、また Fortran ルーチンが引数として C から呼び出し可能なことを宣言します。Fortran は、通常、外部名に対して行うようには下線を付加しません。 BIND(C) は、そうした参照を含むそれぞれの副プログラム内で使用する必要があります。使用規則は次のとおりです。
FUNCTION ABC EXTERNAL XYZ BIND(C) ABC, XYZ |
この例では、XYZ が外部 C 関数であることばかりでなく、Fortran の呼び出し側の ABC を C 関数から呼び出し可能であると宣言しています。BIND(C) を使用すると、C の関数の方で名前に下線を追加する必要はありません。