コンパイラが参照を解決する際のステップの実行順序は次のとおりです。
- 宣言の検索を開始する初期ブロックを決定します。
- 参照されている宣言とそれが属するブロックを見つけます。そのブロックに関連付けられているアクティブ化を見つけます。
- ロケーター修飾子があれば評価し、ポインター値を取得します。
- (定義済みの変数に対する参照である場合) 基準参照とポインターを評価します。
- 参照されている変数にエクステントがある場合、すべてのエクステントを決定します。
- 添え字があればそれを解釈します。
- プロシージャがある場合は呼び出します。
参照解決を準備する際は、次の点に注意してください。
- 完全修飾または部分修飾の構造化参照は、その構造化参照で使用されているのと同じ名前階層を含む構造体の宣言に適用されます。名前に対する単純参照または添え字付き参照は、その名前のすべての宣言に適用されます。
- 参照は、適用可能な宣言を含む最も内側のブロックを見つけることで解決されます。包含するブロック内に適用可能な宣言が存在しない場合、その参照は無効です。適用可能な宣言がブロック内に 1 つしかない場合、参照はその宣言を指すものとして解決されます。適用可能な宣言がブロック内に複数ある場合は、そのブロック内の 1 つの宣言のみを指すように完全修飾で参照を記述する必要があります。そうしないと、参照を確定できず無効になります。
- 適用可能な宣言を含むブロックが見つかれば、参照を解決するために包含ブロックの検索が試行されることはありません。
- 添え字、引数、またはロケーター修飾子が存在するかどうかは参照の解決には影響せず、それにより不確定の参照が一意になることはありません。
- 名前 X に対する単純参照または添え字付き参照は、X の非メンバーの宣言に対する完全修飾参照と見なされます。つまり、同じブロック内に名前 X を持つものとしてメンバーと非メンバーが宣言されている場合、X に対する参照は非メンバーを指すものとして解決されます。この場合のメンバーは、構造化参照を使用して参照する必要があります。