gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:25:57 25 4
gpt4 key购买 nike

我是 Fortran 世界的新手。我得到一段代码,我发现很难理解它。

假设在模块 A 中,var 被声明为整数类型的参数:

integer, parameter :: var = 81

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

integer :: var(2)

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

use A
use B

名字不会有冲突吗?或者数组 var 的两个成员将取值 81?

最佳答案

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

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

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

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

这会让 B 中的 var 进入 C 的范围,并且会隐藏 A 中的 var

如果您必须在模块 C 中同时拥有这两个变量,您可以在使用模块时重命名其中一个。例如:

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.

关于arrays - 在 Fortran 中用另一个模块中的参数名称声明一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23962543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com