1

我已经问过这个问题,但是这次我会尝试更清楚。我对 fortran 真的很陌生,所以请原谅任何语法错误,这是更多的伪代码。

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 被 program2 调用了很长时间。Program1 有一个巨大的 intilization 阶段,只需要发生一次。如果我在程序 2 调用程序 1 之前运行初始阶段,我可以依靠保存所有模块声明的变量吗

4

1 回答 1

3

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

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

于 2013-04-04T17:51:11.940 回答