Pregunta

¿Cómo declaro una función privada en Fortran?

¿Fue útil?

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
...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top