7

ある種の「保護された」と言える、Fortran でグローバル変数を持つ方法があるのだろうかと思います。変数のリストを含むモジュール A を考えています。A を使用する他のすべてのモジュールまたはサブルーチンは、その変数を使用できます。変数の値がわかっている場合は、パラメーターを使用して上書きできないようにすることができます。しかし、変数の値を決定するために最初にコードを実行する必要がある場合はどうなるでしょうか? 変更する必要があるため、パラメーターとして指定できませんでした。似たようなことを実行時の特定の時点で行う方法はありますか?

4

1 に答える 1

15

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  
于 2013-02-22T09:23:29.853 に答える