3

私の使用目的は

program main
  use mod

  external sub

  call sub
end program main

subroutine sub
  ! code here calls subroutines in mod
end subroutine sub

具体的にはmodule mod、範囲内になりsubroutine subますか?また、モジュールがスコープ内/スコープ外にあるときをもっと一般的に知りたいと思います。重要な場合は、gfortran4.6.1を使用しています。

4

1 に答える 1

4

subsubはプログラムの一部ではないため、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ため、の変数とルーチンを使用できます。submod

別の例で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

于 2012-12-12T17:46:47.767 に答える