不止一次包含一个模块

时间:2012-02-03 13:56:46

标签: module fortran

假设我有一个定义一些基本常量的模块,例如

integer, parameter :: i8 = selected_int_kind(8)

如果我将其包含在我的主程序中,并且还包含一个执行其他操作的模块(称为此模块functions),但functionsuse s constants那么我在主程序中主要包括constants两次吗?

如果是这样,这是不是很糟糕?在程序中多次包含模块会不会很危险?

1 个答案:

答案 0 :(得分:11)

不,这样做很好。您使用use语句执行的操作是通过 use association 提供对模块中定义的变量和函数的访问。它不像每次use'时声明变量(但实际上它们已被重新声明)。

唯一需要注意的是循环依赖,其中模块A使用模块B而模块B使用模块A。这是不允许的。

修改:来自Metcalf 。 Fortran 95/2003解释,pg。 72:

  

模块可能包含访问其他模块的use语句。它不得通过一系列use语句直接或间接访问自己,例如a访问bb访问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