我的预期用途是
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,如果重要的话。
答案 0 :(得分:4)
它不在子程序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
另一个问题是当模块变量超出范围时,它们将被取消定义。 Fortran 2008通过隐式地save
隐藏所有模块变量来解决这个问题。