sub
subはプログラムの一部ではないため、mod からルーチンを呼び出したり、変数を使用したりできないため、サブルーチン sub のスコープにはありませんmain
。それらには共通点はなく、別個のコンパイル単位であり、相互にのみ呼び出すことができます (呼び出し可能な場合)。
このことを考慮:
program main
external sub
call sub
end program main
subroutine sub
use mod
! code here calls subroutines in mod
end subroutine sub
mod
ここでは、 が明示的に を使用しているsub
ため、の変数とルーチンを使用できます。sub
mod
別の例でsub
は、 は次の内部プロシージャですmain
。
program main
use mod
call sub
contains
subroutine sub
! code here calls subroutines in mod
end subroutine sub
end program main
また、この場合mod
、からのsub
すべてmain
が のスコープ内にあるため、 からのものを使用できますsub
。
最後に、このケースmod
は対象外であり、元のケースと同様です。
program main
use mod
use mod2
call sub
end program main
module mod2
contains
subroutine sub
! code here calls subroutines in mod
end subroutine sub
end module mod2
もう 1 つの問題は、モジュール変数がスコープ外に出たときに未定義になることです。Fortran 2008 では、すべてのモジュール変数を暗黙的に作成することでこれを解決しましたsave
。