Fortran でプライベート関数を宣言するにはどうすればよいですか?
4 に答える
これは、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
モジュールを使用する場合の構文は次のとおりです。
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
私は FORTRAN の行を書いたことはありませんが、「プライベート モジュール プロシージャ」に関するこのスレッドは話題になっているようです。少なくともそう願っています。少なくとも、答えが含まれているようです。
ジャレドールの要約:
public/private 属性は、Fortran 90 以降のモジュール内に存在します。Fortran 77 以前 -- 運が悪い。
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
...