fortran模块的范围

时间:2013-04-04 16:25:07

标签: scope fortran

我已经问过这个问题但是这次我想要更加清楚。 我真的很新的fortran所以请原谅任何sytax错误这是更多的伪代码。

module variables
   implicit none
   SAVE

   integer x
   integer y

 end module

subroutine init()

  use variables

  x = x + 2
  y = y + 1
endsubroutine

然后我的主程序将是

 program main
    use variables
    implicit none

    call init()

    call some_other_function()
  endprogram

如果我包含我的模块,他们会在some_other_function()中保留其值 假设some_other_function()是一个巨大的模拟程序的抽象。 我可以依靠我的初始化变量来保持其价值。

是模块中的SAVE语句吗?

背景信息:我有program1调用的program1 很长一段时间。 Program1有一个巨大的使用阶段,只需要发生一次。如果我在program2调用program1之前运行了那个初始阶段,我可以依赖所有已保存的模块声明变量

1 个答案:

答案 0 :(得分:3)

在模块中使用SAVE语句时,模块变量的值将在程序运行期间保留。如果在一个过程中初始化它们,主程序和其他过程将看到这些值。只要模块变量在范围内,它们就会被保留,因此,由于您use来自主程序的示例模块,即使没有SAVE语句,它们的值也会在运行期间保留。原则上,如果模块仅在某些过程中使用并且未使用SAVE语句,则当调用链中没有任何过程时,编译器可能会“忘记”这些值。可能很多或者可能所有编译器实际上都没有重置值...这将是额外的工作来确定模块是否已超出范围。

P.S。您的示例有一个错误,因为您从未初始化x和y。你只能改变他们的价值观。