プログラム要素は以下の種類の有効範囲を持ちます (表を参照)。
実行形式プログラム全体で参照可能な要素。大域要素の名前は一意でなくてはなりません。この名前は,同じ実行形式プログラム中の他の大域要素の識別には使用できません。
有効域中で宣言された要素。これらの要素は,その有効域に対して局所的です。局所要素の名前は複数の類に分類されます (表を参照)。
有効域は以下のいずれかです。
構造型定義
手続インタフェース本体 (それに含まれる構造型定義とインタフェース本体を除く)
プログラム単位または副プログラム (それに含まれる構造型定義,インタフェース本体,および副プログラムを除く)
別の有効域のすぐ外を囲んでいる有効域は,親有効域と呼ばれます。親有効域中の名前付き要素は,入れ子になった有効域からも親子結合によって参照することができます (親子結合の詳細については,「参照結合と親子結合」を参照してください)。
要素が有効域中で宣言されると,その名前はその有効域中全体で使用することができます。別の有効域中で宣言された要素は,同じ名前とプロパティを持っていても,別の要素となります。
有効域中では,総称でない局所要素名は,その類内で一意でなくてはなりません。ただし,1 つの類の局所要素名を使って,別の類の局所要素を識別することができます。
有効域中では,総称名は,インタフェース宣言中の任意の手続名と同じであってもかまいません。
構成要素名は,それが属している構造型と同じ有効範囲を持ちます。これは,その型の構造体の構成要素特定子の中にしか置くことができません。
局所名と大域名の相互作用については,表を参照してください。
文,または文の一部の中でしか参照できない要素。このような要素は,それ以降の文の中で引用することはできません。
文要素の名前は,同じ有効域中の大域または局所要素の名前であってもかまいません。この場合,名前は,その文の中でその文要素の名前として解釈されます。
要素 | 有効範囲 | |
---|---|---|
プログラム単位 | 大域 | |
共通ブロック 1 | 大域 | |
外部手続 | 大域 | |
組込み手続 | 大域 2 | |
モジュール手続 | 局所 | 類 I |
内部手続 | 局所 | 類 I |
仮手続 | 局所 | 類 I |
文関数 | 局所 | 類 I |
構造型 | 局所 | 類 I |
構造型の構成要素 | 局所 | 類 II |
名前付き定数 | 局所 | 類 I |
名前付き構造構文 | 局所 | 類 I |
変数群 | 局所 | 類 I |
総称識別子 | 局所 | 類 I |
手続の引数キーワード | 局所 | 類 III |
副プログラム全体で引用できる変数 | 局所 | 類 I |
文関数中の仮引数である変数 | 文 | |
DATA または FORALL 文の DO 形反復並び 3 である DO 変数,または配列構成子 | 文 | |
組込み演算子 | 大域 | |
ユーザー定義演算子 | 局所 | |
文番号 | 局所 | |
外部 I/O 装置番号 | 大域 | |
組込み代入 | 大域 4 | |
ユーザー定義代入 | 局所 | |
1 共通ブロックの名前も局所要素の識別に使用することができます。
2 ある組込み手続が有効域中で使用されていない場合,その名前をその有効域中で局所要素の名前として使用することができます。たとえば,プログラム単位中で組込み関数 COS が使用されていなければ,そのプログラム単位中で COS を局所変数として使用することができます。 3 I/O 並びの DO 形反復並び中の DO 変数は,局所的な有効範囲を持ちます。 4 代入シンボル (=) の有効範囲は大域ですが,別の新たな演算を識別することができます (「総称代入の定義」を参照)。 |
有効域は他の有効域を含むことができます。たとえば,次の例は 6 つの有効域を示しています。
MODULE MOD_1 ! 有効域 1 ... ! 有効域 1 CONTAINS ! 有効域 1 FUNCTION FIRST ! 有効域 2 TYPE NAME ! 有効域 3 ... ! 有効域 3 END TYPE NAME ! 有効域 3 ... ! 有効域 2 CONTAINS ! 有効域 2 SUBROUTINE SUB_B ! 有効域 4 TYPE PROCESS ! 有効域 5 ... ! 有効域 5 END TYPE PROCESS ! 有効域 5 INTERFACE ! 有効域 5 SUBROUTINE SUB_A ! 有効域 6 ... ! 有効域 6 END SUBROUTINE SUB_A ! 有効域 6 END INTERFACE ! 有効域 5 END SUBROUTINE SUB_B ! 有効域 4 END FUNCTION FIRST ! 有効域 2 END MODULE ! 有効域 1
関連情報
構造データ型については,「構造型」を参照してください。
ユーザー定義の総称手続については,「手続の総称名の定義」を参照してください。
組込み手続については,「組込み手続」を参照してください。
手続と副プログラムについては,「プログラム単位と手続」を参照してください。
参照結合と親子結合については,「参照結合と親子結合」を参照してください。
ユーザー定義演算については,「総称演算子の定義」を参照してください。
ユーザー定義代入については,「総称代入の定義」を参照してください。
PRIVATE 属性が要素の参照許可に与える影響については,「PRIVATE および PUBLIC 属性および文」を参照してください。