Когда модуль выходит из области видимости в Фортране 90/95?
Мое предполагаемое использование
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, если это имеет значение.
1 ответ
Он не входит в область действия подпрограммы 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
,