2013-02-22 3 views
4

Fortran에 전역 변수가있는 방법이 있는지 궁금해합니다. 이는 일종의 'protected'라고 말할 수 있습니다. 변수 목록이 들어있는 모듈 A를 생각하고 있습니다. A를 사용하는 다른 모든 모듈이나 서브 루틴은 변수를 사용할 수 있습니다. 변수의 값이 무엇인지 알면 매개 변수를 사용하여 겹쳐 쓸 수 없다는 것을 알 수 있습니다. 하지만 변수 값을 결정하기 위해 먼저 코드를 실행해야한다면 어떻게해야할까요? 변경해야하기 때문에 매개 변수로 지정할 수 없습니다. 런타임시 특정 시점에 비슷한 작업을 수행 할 수있는 방법이 있습니까?Fortran에서 보호 된 전역 변수

답변

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