スコープおよびリンケージ

スコープ とは、名前を修飾しなくてもエンティティーを参照できるプログラム・テキスト内の最大の領域、つまり名前が有効な最大領域のことです。 広い意味で言えば、スコープは、エンティティー名の意味を差別化するために使用される一般的なコ ンテキストです。 スコープの規則をネーム・レゾリューションの規則と組み合わせることで、コンパイラーはファイル内の特定の場所で ID への参照が有効であるかどうかを判別できます。

宣言のスコープと ID の可視性は、関連していますが、概念は異なります。 スコープは、プログラムの中の宣言の可視性を制限できるメカニズムのことです。 ID が可視 であることは、ID に関連付けられたオブジェクトを含むプログラム・テキストの領域に合法的にアクセスできるということです。 スコープが可視性より優先することはありますが、可視性がスコープより優先することはありません。 内部宣言領域で重複 ID が使用されており、そのことによって外部宣言領域で宣言されたオブジ ェクトが隠蔽されている場合は、スコープが可視性よりも優先します。 重複 ID のスコープ (2 番目のオブジェクトの存続期間) が終了しない限り、元の ID を使用して、最初のオブジェクトにアクセスすることはできません。

したがって、ID のスコープは、識別されたオブジェクトのストレージ期間、つまりオブジェクトが ストレージの指定領域に存続する期間と相互に関連します。 オブジェクトの存続期間はストレージ期間の影響を受け、ストレージ期間はオブジェクト ID のスコープの影響を受けます。

リンケージ とは、複数の変換単位間または単一の変換単位内で名前を使用すること、または使用できることを意味します。 変換単位 という用語は、ソース・コード・ファイル、#include ディレクティブによる プリプロセス後に追加されるすべてのヘッダーおよびその他のファイルから、条件つきプリプロセス・ディレクティブ によって スキップされるソース行を除いたものを意味します。リンケージを使用すると、ID の各インスタンスに特定のオブジェクトまたは関数を正しく関連付けることができます。

スコープとリンケージの違いは、スコープはコンパイラーが利用し、リンケージはリンカーが利用する点です。 ソース・ファイルをオブジェクト・コードに変換するときに、コンパイラーは外部結合を持つ ID を追跡し、最終的にオブジェクト・ファイル内のテーブルに格納します。 これにより、リンカーは外部結合を持つ名前を判別することができますが、内部結合を持つ名前 およびリンケージを持たない名前に関する情報は認知できません。

関連参照

IBM Copyright 2003