Sun Studio 12: Fortran ライブラリ・リファレンス

1.1 データ型について

特に指示がない限り、本章に記載する関数ルーチンは、組み込みルーチンではありません。したがって、関数から返されるデータ型が、関数名だけを指定した場合に仮定されるデータ型と食い違う可能性がある場合は、ユーザーが明示的にデータ型を宣言する必要があります。たとえば、getpid()INTEGER*4 を戻す場合は、INTEGER*4 getpid と宣言しないと、結果の正しい処理が保証されません。これは、データ型を明示的に指定しないと、関数名が g で始まっているためにデフォルトにより REAL (実数) 型の結果が仮定されるからです。なお、こういったルーチンについては、その機能要約で明示的な型宣言文が覚え書きの目的で記載されています。

引数のデータ型の宣言および戻り値の処理は、IMPLICIT 文やコンパイラオプションの -dbl-xtypemap によっても変更されることに注意してください。これらのライブラリルーチンを呼び出す際に、期待するデータ型と実際のデータ型が一致していないと、プログラムは予期しない動きをします。コンパイラオプション -xtypemap-dbl を指定すると、INTEGER 関数のデータ型は INTEGER*8 に、REAL 関数は REAL*8 に、DOUBLE 関数は DOUBLE*16 にそれぞれ変更されます。こういった問題を回避するには、ライブラリ呼び出しで指定する関数名と変数について、期待するそれらのサイズを明示的に指定する必要があります。次の例を参考にしてください。


        integer*4 seed, getuid
        real*4 ran
        ...
        seed = 70198
        val = getuid() + ran(seed)
        ...

前述の例のようにサイズを明示的に指定しておくと、コンパイラオプションとして -xtypemap-dbl を指定しても、ライブラリ呼び出しの際にデータ型の変更が行われません。明示的な指定が行われない場合は、これらのコンパイラオプションによって、予期しない結果を招く可能性があります。これらのオプションの詳細については、『Fortran ユーザーズガイド』およびマニュアルページ f95(1) を参照してください。

Fortran 95 コンパイラの f95 は、ほとんどの非組み込みライブラリルーチンのインタフェースを定義するインクルードファイル system.inc を提供します。特にデフォルトのデータ型が -xtypemap を指定して変更された場合、このファイルをインクルードして、呼び出した関数やその引数が正しく入力されているか確認してください。


        include 'system.inc'
        integer(4) mypid
        mypid = getpid()
        print *, mypid

Fortran コンパイラの広域プログラムチェックオプション -Xlist を使用すると、ライブラリ呼び出し全体のデータ型のミスマッチに関連した多数の問題を把握できます。f95 コンパイラによる広域プログラムチェックについては、『Fortran ユーザーズガイド』、『Fortran プログラミングガイド』、およびマニュアルページ f95(1) で説明しています。