Это не относится к подпрограмме sub, так как sub не может вызывать подпрограммы или использовать переменные из мода, потому что 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
.
person
Vladimir F
schedule
12.12.2012