Fortran中模块内部变量的范围

时间:2019-09-16 14:40:50

标签: scope fortran subroutine

我有一个模块:

module A
! derived data type definition
...
contains
  subroutine initialize()
  type(dtype), allocatable, dimension(:) :: var
  ! initialize the derived datatype variable "var"
  end initialize

  subroutine access()
  ! access derived datatype variable "var"
  end access

end module A

main程序中,initializeaccess函数在不同的位置被调用。考虑到两个函数都是在同一模块中定义的,是否可以在access函数内部访问已初始化的变量,而无需将变量var传递到access()函数中?

1 个答案:

答案 0 :(得分:0)

问题代码中有三个作用域单位

  • 模块A
  • 模块过程initialize
  • 模块过程access

Host 关联意味着在模块作用域定义单元中声明的变量(实体)可以在两个模块过程中访问。但是,在模块过程中声明的变量不能在另一个模块过程中访问。

也就是说,即使 type dtype在模块中声明了(并且在initialize中可用),变量变量对于该过程。再次可以在dtype中访问access,但不能访问变量var

要在两个过程中都可以访问var,请在模块作用域中声明它。