モジュール副プログラムは、モジュールの中に書かれたサブルーチンと関数であり、これらのモジュールサブルーチン、モジュール関数と呼ぶ。list3_2.f90に例を示す。
module subprog !モジュールの宣言 implicit none !この宣言は必ず行う contains !この後にサブルーチンや関数を記述する subroutine swap(a, b) !サブルーチンの開始行 !implicit none !上記のimplicit文でモジュール内を設定 integer a,b integer tmp !主プログラムのtmpとは実態違う tmp = a a = b b = tmp end subtoutine swap !サブルーチンの終了行 end module subprog !モジュールの終了行 program exchange !主プログラム use subprog !モジュールsubprogの使用宣言 implicit none !この宣言は必ず行う integer :: x=77, y=9095, tmp=0 !初期値設定と整数型変数を宣言 write(*,*) 'x, y, tmp = ',x, y, tmp !確認のための出力 call swap(x, y) !モジュールサブルーチンを呼ぶ(x,yは実引数) write(*,*) 'x, y, tmp = ',x, y, tmp !確認のための出力 end program exchange !主プログラムの終了行
モジュールの記述形式は、以下のようになる。
module モジュールの名前 ... (モジュールの内容) end module
サブルーチンの記述形式は、以下のようになる。
subroutine サブルーチン名(仮引数, 仮引数, 仮引数 ...) ... (サブルーチンの内容) end subroutine サブルーチン名
contains文の後には、複数のサブルーチンや関数を書くことができる。
contain文よりも前に書かれたimplicit none漸減は、contains文以下でもm有効であるので、サブルーチン内におけるimplicit none宣言は省略可能である。
サブルーチンを含むモジュールの基本的な構造は次のようになる。
モジュールサブルーチンの記述形式
module モジュールの名称 implicit none contains subroutine サブルーチン名(仮引数, 仮引数, 仮引数 ...) !... (サブルーチンの内容) end subroutine サブルーチン名 !... (他のサブルーチンを同様に記述) end module モジュールの名称