構造体の名前空間

提供: RAD Studio
移動先: 案内検索

構造体:インデックス への移動

構造体のタグ名は,共用体のタグ名や列挙型のタグ名と同一の名前空間を共有します(しかし,C++ においては,構造体の中の enum は異なる名前空間にあります)。これは,そのようなタグ名は同一の名前空間ではユニークな名前を持たなければならないということを意味しています。ただし,タグ名はほかの 3 つの名前空間,つまりラベル名空間,メンバー名空間,単純名空間(変数名,関数名,typedef 名,列挙型からなります)内の識別子と異なっている必要はありません。

与えられた構造体あるいは共用体内のメンバー名は,ユニークでなければなりませんが,それらは,ほかの構造体あるいは共用体内のメンバー名と同じ名前でもかまいません。次に例を示します。



 goto s;
     .
     .
     .
 s:           // ラベル
 struct s {   // OK: タグとラベルの名前空間は異なる
    int s;    // OK: ラベル,タグ,メンバー名の名前空間は異なる
    float s;  // NG: メンバー名が重複
 } s;         // OK: 変数の名前空間は異なる。これは C++ では,
              // s がコンストラクタを持っていないときにのみ OK
 union s {    // NG: タグ領域が重複
    int s;    // OK: 新たなメンバー名空間
    float f;
 } f;         // OK: 変数名空間
 struct t {
    int s;    // OK: 別のメンバー名空間
     .
     .
     .
 } s;         // NG: 変数名が重複