在Fortran语言保护的全局变量(Protected global variables in Fo

2019-07-20 08:39发布

我不知道是否存在具有Fortran中一个全局变量,它可以表述为某种“保护”的一种方式。 我想,它包含的变量列表模块A的。 使用一个可以用它每隔模块或子程序的变量。 如果你知道什么该变量的值,可以使用参数来实现,它不能被覆盖。 但是,如果你有什么先运行代码来确定变量的值? 因为你需要去改变它,你不能说出它作为参数。 有没有办法做到相似,但在运行期间的特定点的东西吗?

Answer 1:

你可以使用PROTECTED一个模块中的属性。 已经引入了Fortran 2003标准。 该模块中的程序可以改变保护的对象,但不是在模块或使用你的模块programes程序。

例:

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  


文章来源: Protected global variables in Fortran