2008-10-21 5 views

Odpowiedz

22

Będzie to działać tylko z modułem Fortran 90. W deklaracji modułu można określić ograniczenia dostępu dla listy zmiennych i procedur za pomocą słów kluczowych "publiczny" i "prywatny". Zazwyczaj początkowo pomocne jest samodzielne używanie słowa kluczowego prywatnego, które określa, że ​​wszystko w module jest prywatne, o ile nie jest wyraźnie oznaczone jako publiczne.

W poniższym przykładzie kodu podprogram_1() i funkcja_1() są dostępne z zewnątrz modułu za pomocą wymaganego "użytkowania", ale każda inna zmienna/podprogram/funkcja będzie prywatna.

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

Nigdy nie napisałem linii FORTRAN, ale this thread about "Private module procedures" wydaje się być aktualne, przynajmniej mam taką nadzieję. Wygląda na to, że przynajmniej zawiera odpowiedzi.


jaredor Podsumowanie:

Atrybut publicznych/prywatnych istnieje w modułach w Fortran 90 i później. Fortran 77 i wcześniejsze - nie masz szczęścia.

+1

Twoja zrozumiała skromność to zasługa, ale możesz być bardziej zdecydowany: odpowiedź brzmi w tym wątku. Publiczny/prywatny atrybut istnieje w modułach w Fortranie 90 i późniejszych. Fortran 77 i wcześniejsze - nie masz szczęścia. – jaredor

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

Jeśli używasz modułów, oto składnia:

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

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

Wszystkie podmioty wymienione w prywatnych nie będą dostępne z zewnątrz modułu i wszystkie podmioty wymienione w miejscach publicznych mogą być dostępne z zewnątrz moduł. Wszystkie inne jednostki, domyślnie, są dostępne z zewnątrz modułu.

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