文と属性:モジュール内の言語要素が外部モジュールから参照できるように指定します (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
関連情報
MODULE,PRIVATE,TYPE,USE,型宣言,参照結合と親子結合,属性の互換性,手続の総称名の定義
例
以下の例は,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
この例では,成分 C と D は型 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