Fortran中受保护的全局变量



我想知道是否有一种方法可以在Fortran中拥有一个全局变量,它可以被称为某种"受保护的"。我在想一个模块a,它包含一个变量列表。使用A的每个其他模块或子例程都可以使用它的变量。若您知道变量的值是什么,就可以使用parameter来实现它不能被覆盖。但是,如果必须先运行代码来确定变量值,该怎么办?您无法将其声明为参数,因为您需要更改它。是否有方法在运行时的特定点执行类似的操作?

您可以在模块中使用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  

相关内容

  • 没有找到相关文章

最新更新