PRIVATE

文と属性:モジュール内の言語要素がモジュール自身内のみから参照できるように指定します。

PRIVATE 属性は,型宣言文か,PRIVATE 文で指定することができ,以下のいずれかの形式を取ります。

形式

型宣言文

type, [att-ls,] PRIVATE [,att-ls] :: entity [,entity]...

PRIVATE [[::] entity [,entity]...]

type
データ型指定子。

att-ls
省略可能な属性指定子並び。

entity
以下のいずれか。

文形式では,言語要素は総称識別子 (総称名,ユーザー定義演算子,またはユーザー定義代入) であってもかまいません。

規則と振る舞い

PRIVATE 属性は,モジュールの有効域中でしか使用できません。

1 つのモジュールの有効域では,言語要素並びを持たない PRIVATE 文は 1 回しか指定できません。このような文は,モジュール内のすべての言語要素の基本参照許可を設定します。

モジュール内で PRIVATE 文が指定されていない場合,基本参照許可は PUBLIC となります。PUBLIC の参照許可を持つ言語要素には,USE 文を使って,モジュールの外から参照することができます。

構造型がモジュール内で PRIVATE として宣言されていると,その成分も PRIVATE となります。構造型とその成分は,それを定義しているモジュールの中では,参照結合を通して任意の副プログラムから参照することはできますが,モジュールの外から参照することはできません。

構造型がモジュール内で PUBLIC として宣言されているが,その成分が PRIVATE として宣言されている場合,参照結合 (または親子結合) を通してモジュールを参照している任意の有効域は構造型定義を参照できます。ただし,その成分は参照できません。

モジュール手続が,PRIVATE の参照許可を持つ型の仮引数または関数結果を持っている場合,モジュール手続は PRIVATE の参照許可を持っていなくてはなりません。モジュールが総称識別子を持っている場合,それも PRIVATE として宣言されなくてはなりません。

手続が総称識別子を持っている場合,手続の特定の名前の参照許可は,その総称識別子の参照許可からは独立しています。一方を PRIVATE として宣言し,もう一方を PUBLIC として宣言することができます。

互換性

CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB

関連情報

PUBLICMODULETYPEUSE型宣言参照結合と親子結合属性の互換性手続の総称名の定義

以下の例は,PUBLIC および PRIVATE 属性を指定する型宣言文を示しています。

	REAL,  PRIVATE  :: A, B, C
	INTEGER, PUBLIC :: LOCAL_SUMS

次に PUBLIC および PRIVATE 文の例を示します。

	MODULE SOME_DATA
	  REAL ALL_B
	  PUBLIC ALL_B
	  TYPE RESTRICTED_DATA
	    REAL LOCAL_C
	    DIMENSION LOCAL_C(50)
	  END TYPE RESTRICTED_DATA
	  PRIVATE RESTRICTED_DATA
	END MODULE

次の構造型宣言文は,型がモジュール内に制限されていることを示しています。

	TYPE, PRIVATE  :: DATA
	  ...
	END TYPE DATA

次の例は,PRIVATE 成分を持つ PUBLIC 型を示しています。

	MODULE MATTER
	  TYPE ELEMENTS
	    PRIVATE
	    INTEGER C, D
	  END TYPE
	...
	END MODULE MATTER

この例では,成分 CD は型 ELEMENTS に対して非公開ですが,型 ELEMENTS はモジュール MATTER に対して非公開ではありません。モジュール MATTER を使用する任意のプログラム単位は,型 ELEMENTS の変数を宣言し,型 ELEMENTS の引数値として渡すことができます。

以下に別の例を示します。

	! モジュール VECTRLEN 内の LENGTH は,2 次元ベクトルの長さを計算します。
	! モジュールは,PRIVATE と PUBLIC の両方の手続が含まれています。
	MODULE VECTRLEN
	  PRIVATE SQUARE
	  PUBLIC LENGTH
	  CONTAINS
	  SUBROUTINE LENGTH(x,y,z)
	    REAL,INTENT(IN) x,y
	    REAL,INTENT(OUT) z
	    CALL SQUARE(x,y)
	    z = SQRT(x + y)
	    RETURN
	  END SUBROUTINE
	  SUBROUTINE SQUARE(x1,y1)
	    REAL x1,y1
	    x1 = x1**2
	    y1 = y1**2
	    RETURN
	  END SUBROUTINE
	END MODULE