2008-10-21 23 views

Respuesta

22

Esto sólo funcionará con un módulo de Fortran 90. En su declaración de módulo, puede especificar los límites de acceso para una lista de variables y rutinas usando las palabras clave "pública" y "privada". Por lo general, me resulta útil utilizar la palabra clave privada por sí sola inicialmente, que especifica que todo dentro del módulo es privado a menos que se indique explícitamente como público.

En el siguiente ejemplo de código, se puede acceder a subrutina_1() y a la función_1() desde fuera del módulo a través de la declaración de "uso" requerida, pero cualquier otra variable/subrutina/función será privada.

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

Nunca he escrito una línea de FORTRAN, pero this thread about "Private module procedures" parece ser de actualidad, al menos eso espero. Parece contener respuestas, al menos.


jaredor resumen: existe

El atributo pública/privada dentro de los módulos en Fortran 90 y posteriores. Fortran 77 y anteriores: no tienes suerte.

+1

Su modestia comprensible le da crédito, pero puede ser más definitivo: la respuesta está en ese hilo. El atributo público/privado existe dentro de los módulos en Fortran 90 y posteriores. Fortran 77 y anteriores: no tienes suerte. – 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

Si utiliza módulos, aquí se muestra la sintaxis:

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

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

Todas las entidades que figuran en privado no serán accesibles desde el exterior del módulo y todas las entidades que figuran en público se puede acceder desde fuera de el módulo. Todas las demás entidades, de forma predeterminada, se puede acceder desde fuera del módulo.

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