ID のネーム・スペース

ネーム・スペースは、ID を使用できるさまざまな構文コンテキストです。同じコンテキス ト内および同じスコープ内では、ID によってエンティティーを一意的に識別できる必要があります。 ここで使用するネーム・スペース という用語は、C および C++ に適用されるものであり、 C++ のネーム・スペース言語フィーチャーを指すものではありません。コンパイラーは、ネーム・スペース を設定して、 種類が異なるエンティティーを参照する ID を区別します。異なるネーム・スペース内に同一 ID が存在する場合、これらの ID は同じスコープ内にあっても互いに干渉しません。

各 ID が そのネーム・スペース内で固有である場合には、同じ ID を使用して、別のオブジェクトを宣言することができます。プログラム内の ID の構文上のコンテキストによって、コンパイラーは、 そのネーム・スペースを明確に解決します。

次の 4 つの各ネーム・スペース内では、ID を固有にする必要があります。

ID は、同じネーム・スペース内で再定義できますが、閉じたプログラム・ブロック内で再定義します。

構造体タグ、構造体メンバー、変数名、およびステートメント・ラベルは、4 つの異なるネーム・スペースにあります。 つまり、次の例の student 項目間では、名前の競合は発生しません。

int get_item()
{
   struct student     /* structure tag                  */
   {
      char name[20];  /* this structure member may not be named student      */
      int section;
      int id;
   } sam;             /* this structure variable should not be named student */
 
   goto student;
   student:;          /* null statement label            */
   return 0;
 
   student fred;      /* legal struct declaration in C++ */
}

コンパイラーは student が発生するたびに、プログラム内のコンテキストに基づ いて解釈します。 例えば、キーワード struct の後に student が表示された場合は、これは構造体タグを意味します。 名前 studentstruct student の構造体メンバーに対しては使用できません。 goto 文の後に student が現れたときは、コンパイラーは、ヌル・ステートメント・ラベルに 制御を渡します。ほかのコンテキストでは、 ID student は、構造変数を参照します。 IBM Copyright 2003