我在Fortran世界里很新.我得到了一段代码,在那里我发现很难理解它.
假设在模块A中,var声明为整数类型的参数:
integer, parameter :: var = 81
Run Code Online (Sandbox Code Playgroud)
然后在另一个模块B中,声明一个名称var为的数组:
integer :: var(2)
Run Code Online (Sandbox Code Playgroud)
当这些模块用于第三个模块C时:
use A
use B
Run Code Online (Sandbox Code Playgroud)
这些名字不会有冲突吗?或者数组的两个成员var将取值81?
当您尝试var在所描述的情况下访问变量时,将出现编译时错误.具体错误如下:
Error: Name 'var' at (1) is an ambiguous reference to 'var' from module 'a'
Run Code Online (Sandbox Code Playgroud)
这些变量是否意味着全局范围?您可以声明它们中的一个(或两个),private以便它们作用于模块,并且不会污染全局范围.但在这种情况下,模块C将无法使用私有变量.另一种选择是限制use语句中导入的内容:
use A, only: some_variable1, some_other_variable
use B, only: var
Run Code Online (Sandbox Code Playgroud)
这会让varB从C进入C的范围,并且会var从A中隐藏起来.
如果必须在模块C中同时拥有这两个变量,则可以在使用模块时重命名一个变量.例如:
use A, varA => var
use B, varB => var
Run Code Online (Sandbox Code Playgroud)
它允许您通过名称varA和访问每个模块中的变量var varB.
看这个例子:
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
Run Code Online (Sandbox Code Playgroud)
这将打印81.
| 归档时间: |
|
| 查看次数: |
1122 次 |
| 最近记录: |