如果我想防止模块数据在程序执行过程中被更改,我在Fortran中似乎至少有三个选择:
1.使用SAVE语句
module mymod
implicit none
save
integer :: i = 1
end mymod
Run Code Online (Sandbox Code Playgroud)
2.使用PROTECTED属性
module mymod
implicit none
integer, protected :: i = 1
end mymod
Run Code Online (Sandbox Code Playgroud)
3.使用PARAMETER属性
module mymod
implicit none
integer, parameter :: i = 1
end mymod
Run Code Online (Sandbox Code Playgroud)
这三个选项有什么区别和影响?
这个答案解决了使用名为 的实体的非微妙方面i。在更复杂的情况下还需要考虑其他一些因素。它还使用术语“变量定义上下文”。宽松地说,这意味着变量可能出现在其值可能发生变化的位置。这就像成为一项作业的左侧;显示为 do 变量或对应于intent(out)参数。
i只要可访问,就可以出现在变量定义上下文中。
i(作为非指针对象),在可访问的情况下,只能出现在其模块或该模块的后代范围内的变量定义上下文中。
i永远不能出现在变量定义上下文中:它是常量而不是变量。
该save属性(在当前标准中任何模块变量都具有此属性;即使i在第二个示例中也被保存)不控制修改。