Module 多次包含一个模块
假设我有一个模块,它定义了一些基本常数,比如Module 多次包含一个模块,module,fortran,Module,Fortran,假设我有一个模块,它定义了一些基本常数,比如 integer, parameter :: i8 = selected_int_kind(8) 如果我在我的主程序中包含了这个模块,并且我还包含了一个模块,它可以做一些其他的事情(称这个模块为函数),但是函数也使用常量,那么我在我的主程序中基本上包含了两次常量 如果是的话,这是坏消息吗?在一个程序中包含一个模块太多次会有危险吗?不,这样做很好。使用use语句所做的一切就是通过use关联提供对模块中定义的变量和函数的访问。这与每次使用'd时声明变量不
integer, parameter :: i8 = selected_int_kind(8)
如果我在我的主程序中包含了这个模块,并且我还包含了一个模块,它可以做一些其他的事情(称这个模块为函数
),但是函数
也使用
常量,那么我在我的主程序中基本上包含了两次常量
如果是的话,这是坏消息吗?在一个程序中包含一个模块太多次会有危险吗?不,这样做很好。使用
use
语句所做的一切就是通过use关联提供对模块中定义的变量和函数的访问。这与每次使用'd时声明变量不同(实际上它们是重新声明的)
唯一需要注意的是循环依赖,其中模块A
使用模块B
,模块B
使用模块A
。这是不允许的
编辑:来自Metcalf等人。Fortran 95/2003解释,第72页:
模块可能包含访问其他模块的use
语句。它不能通过一系列use
语句直接或间接地访问自身,例如a
访问b
和b
访问a
虽然这句话并没有直接回答你的问题,但它重申,你唯一不能做的就是有一个循环依赖。因此,以下是完全正确的:
module one_def
implicit none
integer, parameter :: one=1
end module one_def
module two_def
use one_def, only : one
implicit none
integer, parameter :: two=one+one
end module two_def
program test
use one_def, only : one
use two_def, only : two
implicit none
print*, two == one+one ! This prints .True.
end program
不,这样做很好。使用use
语句所做的一切就是将变量引入子程序范围。这与每次使用变量时声明变量不同。唯一需要注意的是循环依赖,其中模块A
使用模块B
,模块B
使用模块A
。这是不允许的。谢谢,回答这个问题,这样我就可以给你打勾了!谢谢,我已经做了,并且添加了更多的信息。