Fortran Builder では、プロジェクトに追加されている一連のソースファイルを対象として、外部副プログラムの引用仕様宣言をモジュール形式で自動生成することができます。引用仕様宣言を用いることで、コンパイル時に引数の整合性がチェックされるため、より安全に外部副プログラムを利用することができます。
※ Fortran Builder では、引用仕様宣言を含むモジュールを「引用仕様モジュール」と呼びます。
利用例(外部サブルーチンの引用仕様モジュールを生成する)
以下のプログラム例 sub.f90 と call_sub.f90 は、メインプログラムから外部サブルーチン add_print を呼び出しています。このプログラム例は問題なくビルドに通りますが、いざ実行すると、例えば "7.0064923E-45" のようなデタラメな計算結果が出力されます。(本来期待される計算結果は 2 + 3 = "5" です。)これは、引数の整合性が取れていない(実数で定義された引数に整数を渡している)ことに起因する実行時エラーです。
以下のプログラム例は短く簡単なので直ぐに間違いに気が付きますが、一般的に、より長く複雑なプログラムだと実行時エラーの原因を見つけ出すのは困難です。場合によっては、実行時エラー自体に気が付かず、そのままプログラムを運用してしまうかもしれません。
そこで Fortran 言語では、引用仕様宣言(interface block)という機能が準備されています。外部副プログラムの引用仕様を正しく宣言することで、引数の整合性をコンパイラがチェックできるようになります。つまり、引数の非整合をコンパイルエラーとして見つけることができます。
以下では、Fortran Builder の「引用仕様モジュールの生成」ツールを使って、外部サブルーチン add_print の引用仕様モジュールを自動生成してみます。
[ sub.f90 ]
subroutine add_print(a, b) implicit none real, intent(in) :: a, b print *, a + b end subroutine
[ call_sub.f90 ]
program main implicit none integer :: a = 2, b = 3 call add_print(a, b) end program
※ 以下の説明は、これらのソースファイルが Fortran Builder のプロジェクトに追加されていることを前提としています。
Fortran Builder のメニューバーから「ツール > 引用仕様モジュールの生成」を選択してください。
「引用仕様モジュールの生成」ウィンドウが開きますので、このまま「OK」ボタンを押してください。
以下のような引用仕様モジュールが生成されます。
(ソースファイル interfaces.f90 がプロジェクトフォルダーに作成され、プロジェクトに追加されます。)
[ interfaces.f90 ]
Module interfaces ! Interface module generated on 2015-01-30 at 17:10:57 +0900. Interface Subroutine add_print(a, b) Implicit None Real, Intent (In) :: a, b End Subroutine End Interface End Module
メインプログラム call_sub.f90 に引用仕様モジュール interfaces を use してください。
[ call_sub.f90 ]
program main use interfaces ! 引用仕様モジュールを使う。 implicit none integer :: a = 2, b = 3 call add_print(a, b) end program
ビルドを行うと、以下のようなコンパイルエラーが出力され、引数の整合性に問題があることが分かります。
エラー: call_sub.f90(5): 誤ったデータ型INTEGER(正しくはREAL)がADD_PRINTの引数A(第1番目)に指定されました