プログラム単位は、一連のオーバーラップしない有効範囲単位から構成されています。 有効範囲単位 とは、固有の有効範囲の境界を持つプログラム単位の部分です。 それは次のうちの 1 つです。
ホスト有効範囲単位 とは、別の有効範囲単位を直接包含している有効範囲単位のことです。 たとえば、次の図では、内部関数 C のホスト有効範囲単位は、メインプログラム A の有効範囲単位です。 ホスト関連付けとは、内部サブプログラム、モジュール・サブプログラム、または派生型定義がそのホストから名前に アクセスする方法です。
エンティティーの有効範囲は次のとおりです。
有効範囲が実行可能プログラムである場合、 そのエンティティーはグローバル・エンティティー と呼ばれます。 有効範囲が有効範囲単位である場合、 そのエンティティーはローカル・エンティティー と呼ばれます。 有効範囲がステートメント、またはステートメントの一部の場合、 そのエンティティーはステートメント・エンティティー と呼ばれます。
有効範囲が構文である場合、
そのエンティティーは、構文エンティティー と呼ばれます。
グローバル・エンティティーは以下のとおりです。
+----------------------------------IBM 拡張----------------------------------+
+------------------------------End of IBM 拡張-------------------------------+
+-------------------------Fortran 2003 ドラフト標準--------------------------+
+----------------------End of Fortran 2003 ドラフト標準----------------------+
ある名前で 1 つのグローバル・エンティティーを識別する場合には、 その名前を使用して同じ実行可能プログラムにある別のグローバル・ エンティティーを識別することはできません。
+-------------------------Fortran 2003 ドラフト標準--------------------------+
モジュールは、外部プロシージャー、共通ブロック、または CRITICAL ロック名と 同じ名前にできます。 モジュールは、BIND 属性を持つ変数と同じ名前にはできません。
+----------------------End of Fortran 2003 ドラフト標準----------------------+
グローバル・エンティティーの名前に関する制約事項の詳細については、「XL Fortran ユーザーズ・ガイド」の 『XL Fortran 外部名の規則』を参照してください。
以下のクラスのエンティティーは、そのエンティティーが定義されている有効範囲単位のローカル・エンティティーです。
コンポーネント名は、コンポーネントの型と同じ有効範囲を持ちます。 コンポーネントは、その型の構造体のコンポーネント指定子内にのみ指定されます。
派生型がモジュール内で定義され、PRIVATE ステートメントが指定されていると、型およびその コンポーネントは、ホスト関連付けによって定義モジュールのサブプログラム内でアクセス可能となります。 アクセス元の有効範囲単位が、使用関連付けによってこの型に アクセスした場合、その有効範囲単位 (およびホスト関連付けによって その有効範囲単位のエンティティーにアクセスするすべての有効範囲単位) は、 派生型定義にはアクセスできますが、そのコンポーネントにはアクセスできません。
内部プロシージャー、モジュール・プロシージャー、または プロシージャーのインターフェース・ブロックにある仮引き数名は、そのホストの 有効範囲単位の引き数キーワードが有効範囲となっています。 引き数キーワードとしての仮引き数名は、仮引き数であるプロシージャーに対する プロシージャー参照でのみ指定できます。 使用関連付けまたはホスト関連付けによって、 プロシージャーまたはプロシージャーのインターフェース・ブロックが 別の有効範囲単位内でアクセス可能な場合、引き数キーワードはその有効範囲単位内の プロシージャーに対するプロシージャー参照についてアクセス可能です。
ある有効範囲単位内では、1 つのクラスのローカル・エンティティーを 識別する名前を使用して、別のクラスのローカル・エンティティーを識別する ことができます。 この名前は、総称名の場合を除いて、同じクラスのローカル・エンティティーを 識別するために使用することはできません。 また、ある有効範囲単位内のグローバル・エンティティーを識別する名前を 使用して、その有効範囲単位内のクラス 1 のローカル・エンティティーを 識別することもできません。ただし、共通ブロック名または外部関数名の場合は 除きます。 レコード構造体のコンポーネントは、クラス 2 のローカル・エンティティーです。 それぞれの型ごとに別個のクラスが存在します。
レコード構造宣言を使用して派生型になるよう宣言された名前には、派生型以外のその有効範囲単位の クラス 1 の別のローカル・エンティティーと同じ名前を付けることができます。 この場合は、その型の構造体コンストラクターは、 その有効範囲では利用不能です。同様に、クラス 1 のローカル・エンティティーには、 その有効範囲内にアクセス可能なクラス 1 の別のローカル・エンティティーがある場合でも、 ホスト関連付けまたは使用関連付けを介してアクセス可能です。
この型の構造体コンストラクターは、その有効範囲では使用できません。 その有効範囲でアクセス可能な派生型と同じ名前の付いている有効範囲のクラス 1 のローカル・エンティティーは、 その有効範囲の宣言ステートメントに明示的に宣言される必要があります。
クラス 1 の 2 つのローカル・エンティティーのうち 1 つが派生型であり、 有効範囲単位内でアクセス可能な場合は、 エンティティーの名前を指定する PUBLIC または PRIVATE ステートメントが、 両方のエンティティーに適用されます。 エンティティーの名前が VOLATILE ステートメントに指定される場合、 そのエンティティー、またはその有効範囲に宣言されたエンティティーは、 揮発属性を持ちます。2 つのエンティティーがモジュールの共通エンティティーの場合、 そのモジュールを参照し、use_name としてエンティティーの名前を指定する USE ステートメント上での名前変更は、両方のエンティティーに適用されます。
範囲単位指定内の共通ブロック名は、名前付き定数または 組み込みプロシージャー以外であれば、どのローカル・エンティティーの名前で あってもかまいません。 この名前は、COMMON、VOLATILE、SAVE ステートメントでスラッシュで区切られる場合にのみ、 共通ブロック・エンティティーとして認識されます。 これ以外の場合、その名前はローカル・エンティティーを識別します。 組み込みプロシージャー名が、組み込みプロシージャーを参照しない 有効範囲単位内の共通ブロック名である可能性があります。 この場合、組み込みプロシージャー名にはアクセスできません。
外部関数名を関数結果名とすることもできます。 これは、外部関数名を ローカル・エンティティーとする唯一の方法です。
有効範囲単位に組み込みプロシージャーと同じ名前のクラス 1 の ローカル・エンティティーが含まれている場合、その有効範囲単位にある 組み込みプロシージャーにはアクセスできません。
インターフェース・ブロックの総称名は、そのインターフェース・ブロックにあるプロシージャー名のいずれか、 つまりアクセス可能な任意の総称名と同じ名前の場合があります。 また、総称組み込みプロシージャーと同じ名前である可能性もあります。 詳細については、プロシージャー参照の解決を参照してください。
以下の項目は、ステートメント・エンティティーです。
共通ブロック名またはスカラー変数名を除き、ステートメントまたは構文の 有効範囲単位内でアクセス可能なクラス 1 のグローバル・エンティティー またはローカル・エンティティーの名前は、そのステートメントまたは 構文のそれぞれのエンティティー名と同じにすることはできません。 ステートメント・エンティティーまたは構文エンティティーの有効範囲内で、 別のステートメント・エンティティーまたは構文エンティティーが同じ名前を 持つことはできません。
ステートメント関数のステートメントに仮引き数として指定される 変数名の有効範囲は、指定されているステートメントの有効範囲と同じです。 この変数名の型および型付きパラメーターは、有効範囲単位内の ステートメント関数を含む変数名である場合に持つ型および 型付きパラメーターと同じです。
ステートメントまたは構文の有効範囲単位内でアクセス可能なグローバル・エンティティーまたは ローカル・エンティティーの名前が、ステートメントまたは構文のステートメント・エンティティーまたは 構文エンティティーの名前と同じ場合、名前はステートメント・エンティティーまたは構文エンティティーの 名前として、そのステートメント・エンティティーまたは構文エンティティーの有効範囲内で解釈されます。 ステートメント・エンティティーまたは構文エンティティーの有効範囲外にある ステートメントまたは構文の一部を含む有効範囲単位内の別の場所では、 名前はグローバル・エンティティーまたはローカル・エンティティーの 有効範囲として解釈されます。
ステートメント・エンティティーまたは構文エンティティーの名前が、変数、定数、または関数を示す アクセス可能な名前と同じ場合、ステートメント・エンティティーまたは構文エンティティーの型および 型付きパラメーターは、変数、定数、または関数の型および型付きパラメーターと同じになります。 名前が同じでない場合のステートメント・エンティティーまたは 構文エンティティーの型は、有効な暗黙の型設定規則によって決まります。 ステートメント・エンティティーが DATA ステートメントにある 暗黙 DO の DO 変数である場合、その変数にはアクセス可能な 名前付き定数と同じ名前を付けることはできません。
+---------------------------------Fortran 95---------------------------------+
以下は、ステートメントまたは構文エンティティー、あるいはその両方です。
FORALL ステートメントまたは構文エンティティーが持つ 唯一の属性は、このステートメントまたは構文エンティティーが、FORALL を含む有効範囲単位内の 変数名である場合に持つことになる型および型付きパラメーターです。 整数型になります。
共通ブロック名またはスカラー変数名を除き、クラス 1 のグローバル・ エンティティーおよびローカル・エンティティーを識別する 名前 (FORALL ステートメントまたは FORALL 構文の有効範囲単位 内でアクセス可能) は、index_name と同じにすることはできません。 FORALL 構文の有効範囲単位内で、 ネストされた FORALL ステートメントまたは FORALL 構文には、 同じ index_name を付けることはできません。
FORALL ステートメントまたは構文の有効範囲単位内でアクセス可能な グローバル・エンティティーまたはローカル・エンティティーの名前が index_name と同じ場合、 その名前は FORALL ステートメントまたは構文の有効範囲内では index_name の名前として 解釈されます。 また有効範囲単位内のどこにおいても、その名前はグローバル・エンティティー またはローカル・エンティティーの名前として解釈されます。
+-----------------------------End of Fortran 95------------------------------+
+-------------------------Fortran 2003 ドラフト標準--------------------------+
以下は、構文エンティティーです。
ASSOCIATE 構文の有効範囲単位内で アクセス可能なグローバル・エンティティーまたはローカル・エンティティーの名前が関連名と同じ場合、 その名前は ASSOCIATE 構文のブロック内で関連名の名前として解釈されます。 有効範囲単位内においてその他の場合には、 その名前はグローバル・エンティティーおよびローカル・エンティティーとして解釈されます。
+----------------------End of Fortran 2003 ドラフト標準----------------------+