プログラム単位は、一連のオーバーラップしない有効範囲単位から構成されています。 有効範囲単位 とは、固有の有効範囲の境界を持つプログラム単位の部分です。それは次のうちの 1 つです。
ホスト有効範囲単位 とは、別の有効範囲単位を直接包含している有効範囲単位のことです。たとえば、次の図では、内部関数 C のホスト有効範囲単位は、メインプログラム A の有効範囲単位です。ホスト関連付けは、内部サブプログラム、モジュール・サブプログラム、または定義がそのホストから名前にアクセスできるようにします。
エンティティーの有効範囲は次のとおりです。
有効範囲が実行可能プログラムである場合、そのエンティティーはグローバル・エンティティー と呼ばれます。有効範囲が有効範囲単位である場合、そのエンティティーはローカル・エンティティー と呼ばれます。有効範囲がステートメント、またはステートメントの一部の場合、そのエンティティーはステートメント・エンティティー と呼ばれます。
有効範囲が構造体である場合、そのエンティティーは、構造体エンティティー と呼ばれます。
+----------------------------------IBM 拡張----------------------------------+
グローバル・エンティティーには、プログラム単位、外部プロシージャー、共通ブロック、および CRITICAL lock_names があります。
+--------------------------------IBM 拡張の終り-------------------------------+
ある名前で 1 つのグローバル・エンティティーを識別する場合には、その名前を使用して同じ実行可能プログラムにある別のグローバル・エンティティーを識別することはできません。
グローバル・エンティティーの名前に関する制約事項の詳細については、「ユーザーズ・ガイド」の『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---------------------------------+
以下は、Fortran 95 ステートメントおよび構造体エンティティーです。
FORALL ステートメントまたは構造体エンティティーが持つ属性は、 FORALL を含む有効範囲単位内の変数名がそのエンティティーの名前である場合に持つことになるタイプおよび型付きパラメーターだけであり、整数タイプになります。
共通ブロック名またはスカラー変数名を除き、クラス 1 のグローバル・エンティティーおよびローカル・エンティティーを識別する名前 (FORALL ステートメントまたは FORALL 構造体の有効範囲単位内でアクセス可能) は、index_name と同じにすることはできません。 FORALL 構造体の有効範囲単位内で、ネストされた FORALL ステートメントまたは FORALL 構造体には、同じ index_name を付けることはできません。
FORALL ステートメントまたは FORALL 構造体の有効範囲単位内でアクセス可能なグローバル・エンティティーまたはローカル・エンティティーの名前が index_name と同じ場合、その名前は FORALL ステートメントまたは FORALL 構造体の有効範囲内では index_name として解釈されます。 また有効範囲単位内のどこにおいても、その名前はグローバル・エンティティーまたはローカル・エンティティーの名前として解釈されます。
+------------------------------Fortran 95 の終り------------------------------+