我想知道是否有一种方法可以在Fortran中使用全局变量,可以将其称为某种“受保护”。我在想一个包含变量列表的模块A.使用A的每个其他模块或子例程都可以使用它的变量。如果你知道变量的值是什么,你可以使用参数来实现它不能被覆盖。但是如果你必须先运行代码来确定变量值呢?您无法将其声明为参数,因为您需要更改它。有没有办法在运行时的某个特定点做类似的事情?
答案 0 :(得分:12)
您可以在模块中使用PROTECTED
属性。它已经与Fortran 2003标准一起引入。
模块中的过程可以更改PROTECTED对象,但不能更改使用模块的模块或程序中的过程。
示例:
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