関連情報

Fortran Builder で引用仕様モジュールを生成する

Fortran Builder では、プロジェクトに追加されている一連のソースファイルを対象として、外部副プログラムの引用仕様宣言をモジュール形式で自動生成することができます。引用仕様宣言を用いることで、コンパイル時に引数の整合性がチェックされるため、より安全に外部副プログラムを利用することができます。

※ Fortran Builder では、引用仕様宣言を含むモジュールを「引用仕様モジュール」と呼びます。

※ 以下の例では Windows 版を用いていますが、Mac 版でも同様の手順でご利用いただけます。

利用例(外部サブルーチンの引用仕様モジュールを生成する)

以下のプログラム例 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番目)に指定されました

Results matter. Trust NAG.
Privacy Policy | Trademarks