構造体の名前空間
構造体:インデックス への移動
構造体のタグ名は,共用体のタグ名や列挙型のタグ名と同一の名前空間を共有します(しかし,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: 変数名が重複