不止一次包含一个模块

drj*_*rm3 7 fortran module

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

integer, parameter :: i8 = selected_int_kind(8)
Run Code Online (Sandbox Code Playgroud)

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

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

Chr*_*ris 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
Run Code Online (Sandbox Code Playgroud)