Domanda

Come posso dichiarare una funzione privata in Fortran?

È stato utile?

Soluzione

Funzionerà solo con un modulo Fortran 90. Nella dichiarazione del tuo modulo, puoi specificare i limiti di accesso per un elenco di variabili e routine usando il "quot" pubblico " e "privato" parole chiave. Di solito trovo utile usare inizialmente la parola chiave privata da sola, il che specifica che tutto all'interno del modulo è privato se non esplicitamente contrassegnato come pubblico.

Nell'esempio di codice riportato di seguito, la subroutine_1 () e la funzione_1 () sono accessibili dall'esterno del modulo tramite il "uso" richiesto , ma qualsiasi altra variabile / subroutine / funzione sarà privata.

module so_example
  implicit none

  private

  public :: subroutine_1
  public :: function_1

contains

  ! Implementation of subroutines and functions goes here  

end module so_example

Altri suggerimenti

Se usi i moduli, ecco la sintassi:

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

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

Tutte le entità elencate in PRIVATO non saranno accessibili dall'esterno del modulo e tutte le entità elencate in PUBLIC sono accessibili dall'esterno del modulo. Tutte le altre entità, per impostazione predefinita, sono accessibili dall'esterno del modulo.

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

Non ho mai scritto una riga di FORTRAN, ma questa discussione su " Procedure del modulo privato " sembra essere d'attualità, almeno lo spero. Sembra contenere risposte, almeno.


jaredor riepilogo:

  

L'attributo public / private esiste all'interno dei moduli in Fortran 90 e versioni successive. Fortran 77 e precedenti: sei sfortunato.

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
...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top