Когда модуль выходит из области видимости в Фортране 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,

Другие вопросы по тегам