Частная функция в Фортране - PullRequest
11 голосов
/ 21 октября 2008

Как мне объявить приватную функцию в Фортране?

Ответы [ 4 ]

24 голосов
/ 21 октября 2008

Это будет работать только с модулем Fortran 90. В объявлении вашего модуля вы можете указать ограничения доступа к списку переменных и подпрограмм, используя ключевые слова public и private. Обычно я нахожу полезным сначала использовать ключевое слово private само по себе, которое указывает, что все в модуле является приватным, если явно не отмечено public.

В приведенном ниже примере кода функции subroutine_1 () и function_1 () доступны извне модуля через необходимый оператор «use», но любая другая переменная / подпрограмма / функция будет закрытой.

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 голосов
/ 19 июня 2015

Если вы используете модули, вот синтаксис:

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

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

Все объекты, перечисленные в PRIVATE, не будут доступны извне модуля, а все объекты, перечисленные в PUBLIC, могут быть доступны извне модуля. Все остальные объекты по умолчанию доступны из-за пределов модуля.

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
2 голосов
/ 21 октября 2008

Я никогда не писал ни одной строки на Фортране, но эта тема о "процедурах частного модуля" кажется актуальной, по крайней мере, я на это надеюсь. Кажется, содержит ответы, по крайней мере.


Джаредор Резюме:

Атрибут public / private существует в модулях в Fortran 90 и более поздних версиях. Фортран 77 и раньше - тебе не повезло.

1 голос
/ 21 октября 2008
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
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...