在Fortran中使用另一个模块中的参数名称声明一个数组

时间:2014-05-30 20:00:23

标签: arrays fortran

我在Fortran世界里相当新鲜。我得到了一段代码,在那里我发现很难理解它。

让我们在模块A中说,var被声明为整数类型的参数:

integer, parameter :: var = 81

然后在另一个模块B中,声明了一个名为var的数组:

integer :: var(2)

当在第三个模块C中使用这些模块时:

use A
use B

不知道名字是否有冲突?或者数组var的两个成员将取值81?

1 个答案:

答案 0 :(得分:8)

当您尝试在所描述的情况下访问变量var时,会出现编译时错误。具体错误如下:

Error: Name 'var' at (1) is an ambiguous reference to 'var' from module 'a'

这些变量是否意味着全局范围?您可以使用private声明其中一个(或两个),以便它们作用于模块,并且不会污染全局范围。但在这种情况下,模块C将无法使用私有变量。另一个选项是使用以下内容限制use语句中导入的内容:

use A, only: some_variable1, some_other_variable
use B, only: var

这样可以让var从B进入C的范围,并隐藏var

如果必须在模块C中同时拥有这两个变量,则可以在使用模块时重命名。 E.g:

use A, varA => var
use B, varB => var

允许您通过名称varAvarB访问每个模块中的变量var。

见这个例子:

module A
  integer, parameter :: var = 81
 contains
end module

module B
  integer :: var(2)
 contains
end module

module C
  use A, varA => var
  use B, varB => var
 contains
end module

program test
  use C    
  print *, varA
end program

将打印81