Pregunta
¿Cómo declaro una función privada en Fortran?
Solución
Esto solo funcionará con un módulo Fortran 90. En la declaración de su módulo, puede especificar los límites de acceso para una lista de variables y rutinas utilizando el "público". y "privado" palabras clave Por lo general, me resulta útil usar la palabra clave privada por sí misma inicialmente, lo que especifica que todo dentro del módulo es privado a menos que se marque explícitamente como público.
En el ejemplo de código a continuación, se puede acceder a la subrutina_1 () y la función_1 () desde fuera del módulo a través del requisito " use " declaración, 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
Otros consejos
Si usa módulos, aquí está la sintaxis:
PUBLIC :: subname-1, funname-2, ...
PRIVATE :: subname-1, funname-2, ...
No se podrá acceder a todas las entidades enumeradas en PRIVATE desde fuera del módulo y se puede acceder a todas las entidades que figuran en PUBLIC desde fuera del módulo. Se puede acceder a todas las demás entidades, de forma predeterminada, 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
Nunca he escrito una línea de FORTRAN, pero este hilo sobre " Procedimientos del módulo privado " parece ser de actualidad, al menos eso espero. Parece contener respuestas, al menos.
jaredor resumen:
El atributo público / privado existe dentro de los módulos en Fortran 90 y posteriores. Fortran 77 y anteriores: no tienes suerte.
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
...