我已经问过这个问题但是这次我想要更加清楚。 我真的很新的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之前运行了那个初始阶段,我可以依赖所有已保存的模块声明变量
答案 0 :(得分:3)
在模块中使用SAVE
语句时,模块变量的值将在程序运行期间保留。如果在一个过程中初始化它们,主程序和其他过程将看到这些值。只要模块变量在范围内,它们就会被保留,因此,由于您use
来自主程序的示例模块,即使没有SAVE
语句,它们的值也会在运行期间保留。原则上,如果模块仅在某些过程中使用并且未使用SAVE
语句,则当调用链中没有任何过程时,编译器可能会“忘记”这些值。可能很多或者可能所有编译器实际上都没有重置值...这将是额外的工作来确定模块是否已超出范围。
P.S。您的示例有一个错误,因为您从未初始化x和y。你只能改变他们的价值观。