14

Fortran でプライベート関数を宣言するにはどうすればよいですか?

4

4 に答える 4

27

これは、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
于 2008-10-21T15:25:52.510 に答える
3

モジュールを使用する場合の構文は次のとおりです。

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
于 2015-06-18T22:03:15.350 に答える
2

私は FORTRAN の行を書いたことはありませんが、「プライベート モジュール プロシージャ」に関するこのスレッドは話題になっているようです。少なくともそう願っています。少なくとも、答えが含まれているようです。


ジャレドールの要約:

public/private 属性は、Fortran 90 以降のモジュール内に存在します。Fortran 77 以前 -- 運が悪い。

于 2008-10-21T08:40:18.270 に答える
1
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
...
于 2008-10-21T14:07:14.680 に答える