什么时候一个模块走出去的范围中的Fortran 90/95?(When does a module

2019-07-05 01:34发布

我的用途是

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 ? 另外,我有兴趣了解更多一般当一个模块是输入/输出范围。 我使用gfortran 4.6.1,如果它很重要。

Answer 1:

这不是在子程序子的范围,因为子不能调用例程或使用变量来自国防部,因为sub是不是计划的一部分main 。 他们没有任何共同之处,是独立的编译单元,只可互相调用(如果它们是可调用)。

试想一下:

program main

  external sub

  call sub
end program main

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

在这里,你可以使用变量和例程从modsub ,因为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

此外,在这种情况下,你可以使用来自东西modsub ,因为一切从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

另一个问题是模块变量取消定义,当他们走出去的范围。 Fortran的2008年使所有的模块变量隐含地解决了这个save



文章来源: When does a module go out of scope in Fortran 90/95?