【问题标题】:Including a module more than once多次包含一个模块
【发布时间】:2012-02-03 13:56:46
【问题描述】:

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

integer, parameter :: i8 = selected_int_kind(8)

如果我在我的主程序中包含这个并且我还包含一个做其他事情的模块(调用这个模块functions)但functionsuses constants,那么我基本上包括@987654326 @ 在我的主程序中两次?

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

【问题讨论】:

  • 不,这样做很好。您对use 语句所做的所有事情都是将变量带入子程序范围。这不像是在每次use'd 时都声明变量。唯一需要注意的是循环依赖,其中模块A 使用模块B,而模块B 使用模块A。这是不允许的。
  • 谢谢,把这个作为答案,这样我就可以给你打勾了!
  • 谢谢,我已经完成并添加了更多信息。

标签: module fortran


【解决方案1】:

不,这样做很好。您对use 语句所做的所有事情都是通过use association 提供对模块中定义的变量和函数的访问。这不像是在每次use'd 时都声明变量(但实际上它们是重新声明的)。

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

编辑:来自梅特卡夫。 Fortran 95/2003 解释,第 1 页。 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 2020-04-17
    • 2020-01-26
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    相关资源
    最近更新 更多