Fortran 中受保护的全局变量 [英] Protected global variables in Fortran
问题描述
我想知道在 Fortran 中是否有一种方法可以使用全局变量,可以将其描述为某种受保护".我正在考虑一个包含变量列表的模块 A.使用 A 的每个其他模块或子例程都可以使用它的变量.如果你知道变量的值是什么,你可以使用参数来实现它不能被覆盖.但是,如果您必须首先运行代码来确定变量值怎么办?您无法将其声明为参数,因为您需要更改它.有没有办法在运行时的特定点做类似的事情?
I wonder if there is a way of having a global variable in Fortran, which can be stated as some kind of 'protected'. I am thinking of a module A that contains a list of variables. Every other module or subroutine that uses A can use it's variables. If you know what the value of the variable is, you could use parameter to achieve that it can't be overwritten. But what if you have to run code first to determine the variables value? You could not state it as parameter since you need to change it. Is there a way to do something similar but at a specific point at runtime?
推荐答案
您可以在模块中使用 PROTECTED
属性.它是随 Fortran 2003 标准引入的.模块中的过程可以更改受保护的对象,但不能更改模块中的过程或使用您的模块的程序.
You could use the PROTECTED
attribute in a module. It has been introduced with the Fortran 2003 standard.
The procedures in the module can change PROTECTED objects, but not procedures in modules or programes that USE your module.
例子:
module m_test
integer, protected :: a
contains
subroutine init(val)
integer val
a = val
end subroutine
end module m_test
program test
use m_test
call init(5)
print *, a
! if you uncomment these lines, the compiler should flag an error
!a = 10
!print *, a
call init(10)
print *, a
end program
这篇关于Fortran 中受保护的全局变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!