我在Fortran世界里相当新鲜。我得到了一段代码,在那里我发现很难理解它。
让我们在模块A中说,var
被声明为整数类型的参数:
integer, parameter :: var = 81
然后在另一个模块B中,声明了一个名为var
的数组:
integer :: var(2)
当在第三个模块C中使用这些模块时:
use A
use B
不知道名字是否有冲突?或者数组var
的两个成员将取值81?
答案 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
允许您通过名称varA
和varB
访问每个模块中的变量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
。