2008-10-21 2 views

ответ

22

Это будет работать только с модулем Fortran 90. В объявлении модуля вы можете указать ограничения доступа для списка переменных и подпрограмм с использованием «общедоступных» и «частных» ключевых слов. Обычно мне полезно сначала использовать собственное ключевое слово по умолчанию, которое указывает, что все внутри модуля является закрытым, если явно не открыто.

В приведенном ниже примере кода функции subroutine_1() и function_1() доступны извне модуля через требуемый оператор «use», но любая другая функция/подпрограмма/функция будет закрыта.

module so_example 
    implicit none 

    private 

    public :: subroutine_1 
    public :: function_1 

contains 

    ! Implementation of subroutines and functions goes here 

end module so_example 
2

Я никогда не писал строки ФОРТРАНА, но this thread about "Private module procedures" кажется актуальным, по крайней мере, я надеюсь. Кажется, содержит ответы, по крайней мере.


jaredor Резюме:

Атрибут открытый/закрытый существует внутри модулей в Fortran 90 и позже. Fortran 77 и раньше - вам не повезло.

+1

Ваша понятная скромность дает вам кредит, но вы можете быть более окончательным: ответ в этой теме. Атрибут public/private существует в модулях в Fortran 90 и более поздних версиях. Fortran 77 и раньше - вам не повезло. – jaredor 2008-10-21 13:08:40

1
Private xxx, yyy, zzz 

real function xxx (v) 
    ... 
end function xxx 

integer function yyy() 
    ... 
end function yyy 

subroutine zzz (a,b,c) 
    ... 
end subroutine zzz 

... 
other stuff that calls them 
... 
2

Если вы используете модули, здесь синтаксис:

PUBLIC :: subname-1, funname-2, ... 

PRIVATE :: subname-1, funname-2, ... 

Все объекты, перечисленные в ЧАСТНЫЙ не будут доступны снаружи модуля и все объекты, перечисленные в PUBLIC могут быть доступны извне модуль. Все остальные объекты по умолчанию могут быть доступны извне модуля.

MODULE Field 
    IMPLICIT NONE 

    Integer :: Dimen 

    PUBLIC :: Gravity 
    PRIVATE :: Electric, Magnetic 

CONTAINS 

    INTEGER FUNCTION Gravity() 
    .......... 
    END FUNCTION Gravity 


    REAL FUNCTION Electric() 
    .......... 
    END FUNCTION 


    REAL FUNCTION Magnetic() 
    .......... 
    END FUNCTION 

    .......... 

END MODULE Field 
Смежные вопросы