Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Module 多次包含一个模块_Module_Fortran - Fatal编程技术网

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
。这是不允许的。谢谢,回答这个问题,这样我就可以给你打勾了!谢谢,我已经做了,并且添加了更多的信息。