PUBLIC

文と属性:モジュール内の言語要素が外部モジュールから参照できるように指定します (USE 文を指定することで)。

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

形式

型宣言文

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

PUBLIC [[::] entity [,entity]...]

type
データ型指定子。

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

entity
以下のいずれか。

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

規則と振る舞い

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

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

モジュール内で PRIVATE 文が指定されていない場合,基本参照許可は PUBLIC となります。

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

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

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

互換性

CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB

関連情報

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

以下の例は,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

次の例は,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