我是Fortran的新手并试图了解以下是否可行。我构建程序的想法是在一个模块中声明精度和变量类型。然后使用这些变量而不再声明其他模块或主程序中的类型。
module pre
implicit none
INTEGER, PARAMETER :: sp=SELECTED_REAL_KIND(6,37)
INTEGER, PARAMETER :: dp=SELECTED_REAL_KIND(15,307)
INTEGER, PARAMETER :: qp=SELECTED_REAL_KIND(33,4931)
REAL(dp), PARAMETER :: pi = 4.*ATAN(1.)
REAL(dp) :: H
REAL(dp) :: M
REAL(dp) :: KR
end module pre
现在我想利用包含一个或多个函数的另一个模块中的所有变量,例如:
module hon
use pre
implicit none
contains
function KE(H,M) result(KR)
KR = 2*PI/H/M
end function KE
end module hon
然后我按顺序使用gfortran:
gfortran -c mod_pre.f90
gfortran -c mod_hon.f90
由于'module pre'是'module hon'的一部分,我按顺序编译,但gfortran显示错误。
根据上面的代码,我了解变量类型和参数应该包含在 USE ;但是我从 gfortran 得到的消息是,当我尝试编译'module hon'时,我的变量都没有IMPLICIT类型。
有人可以澄清问题或建议解决方案吗?我想避免让我的变量分散在多个模块中。
谢谢!
答案 0 :(得分:0)
在函数语句中,result(kr)
表示函数结果的名称为kr
。此函数结果与模块变量kr
不同。特别是,此函数结果使模块变量无法访问。
函数结果特定于函数本身,其属性必须在函数子程序中声明。
类似地,函数H
和M
的伪参数与模块变量不同,需要在函数子程序中声明。
除此之外,您可能对此other question也有类似的担忧。
要明确的是,不可能说“所有函数结果称为kr
”,所有称为H
或M
的虚拟参数都具有这些特征“。必须为每个单独的对象提供属性。
但是,虽然我不建议这样做,但是文字文本包含(使用预处理程序或包含文件)可以帮助您:
function ke(H, M) result (kr)
include 'resdummydecls'
...
end function
文件中有声明。