Pergunta

Como faço para declarar uma função particular em Fortran?

Foi útil?

Solução

Isto só irá funcionar com um módulo Fortran 90. Em sua declaração do módulo, você pode especificar os limites de acesso para uma lista de variáveis ??e rotinas usando o "público" e palavras-chave "privadas". Eu costumo achar que é útil usar a palavra-chave privada, por si só, inicialmente, que especifica que tudo dentro do módulo é privado, a menos público explicitamente marcada.

No exemplo de código abaixo, subroutine_1 () e função_1 () são acessíveis a partir do exterior do módulo através do requisito declaração "uso", mas qualquer outra variável / sub-rotina / função será privado.

module so_example
  implicit none

  private

  public :: subroutine_1
  public :: function_1

contains

  ! Implementation of subroutines and functions goes here  

end module so_example

Outras dicas

Se você usar módulos, aqui é a sintaxe:

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

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

Todas as entidades listadas em privado não será acessível a partir do exterior do módulo e todas as entidades listadas em público pode ser acessado de fora do módulo. Todas as outras entidades, por padrão, pode ser acessado de fora do 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

Eu nunca escrevi uma linha de Fortran, mas esta discussão sobre os 'procedimentos do módulo privada' parece ser tópico, pelo menos eu espero que sim. Parece conter respostas, pelo menos.


jaredor resumo:

O atributo público / privado existe dentro de módulos em Fortran 90 e posterior. Fortran 77 e anteriores -. Você está fora de sorte

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top