假设我有一个定义一些基本常量的模块,例如
integer, parameter :: i8 = selected_int_kind(8)
如果我将其包含在我的主程序中,并且还包含一个执行其他操作的模块(称为此模块functions
),但functions
也use
s constants
那么我在主程序中主要包括constants
两次吗?
如果是这样,这是不是很糟糕?在程序中多次包含模块会不会很危险?
答案 0 :(得分:11)
不,这样做很好。您使用use
语句执行的操作是通过 use association 提供对模块中定义的变量和函数的访问。它不像每次use
'时声明变量(但实际上它们已被重新声明)。
唯一需要注意的是循环依赖,其中模块A
使用模块B
而模块B
使用模块A
。这是不允许的。
修改:来自Metcalf 等。 Fortran 95/2003解释,pg。 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