2013-02-22 2 views
4

Интересно, есть ли способ иметь глобальную переменную в Fortran, которая может быть заявлена ​​как некоторая «защищенная». Я думаю о модуле 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 
Смежные вопросы