名前空間
コンパイラは項目の種類に使用する識別子を区別するために 「名前空間」に設定します。各名前空間内の名前が競合しない一意である必要があります同一の名前は複数の名前空間で使用できます。これは項目が別の名前空間にある複数の異なる項目に同じ識別子を使用できることを意味します。コンパイラが識別子の構文のコンテキストに基づいてプログラムの参照を解決できます。
[!メモ]
C++ の 「名前空間」機能と名前空間の限られた C の概念を混同しないでください。詳細についてはC++ 言語リファレンス の 名前空間 を参照してください。
このリストはC で使用される名前空間について説明します。
ステートメント ラベル
のステートメント ラベルはステートメントの一部です。ステートメント ラベルの定義にコロンが常に表示されますがcase のラベルの一部ではありません。ステートメント ラベルの使用は常にすぐにキーワード goto に従います。ステートメント ラベルを別の名前またはそのほかの関数のラベル名とは異なる ID である必要はありません。構造体共用体列挙型のタグ
これらのタグの一部は構造体共用体列挙型指定子ではある場合は常にすぐに予約語 struct 共用体 または enum に従います。タグ名が同じ表示の他のすべての構造体列挙体または共用体の個々のタグである必要があります。構造体または共用体のメンバー
メンバー名は各構造体や共用体型に関連付けられた名前空間に割り当てられます。つまり同じ識別子は構造体や共用体の複数の同時にコンポーネント名です。コンポーネント名の定義は構造体や共用体型の指定子内に常に発生します。コンポーネント名の使用は常にすぐにメンバー選択演算子に続きます。 – > と 。)。メンバーの名前は構造体または共用体で一意である必要があります構造体や共用体のメンバーの名前などほかの名前または構造体の名前自体とは別個にする必要はありません。通常の識別子
他の名前はすべての変数関数 (を含む仮パラメーターおよびローカル変数)および列挙定数の名前空間になります。識別子名が表示になったためブロック内で定義し直すことができます。型定義の名前
型定義の名前が同じでスコープ識別子として使用することはできません。
たとえば構造のタグ構造体のメンバーと変数名が 3 種類の名前空間にあるためこの例で student という 3 種類の項目は競合しません。各項目のコンテキストはプログラムの student が繰り返されてを正しく解釈ができます。(構造体に関する情報については構造体の宣言 を参照してください)。
struct student {
char student[20];
int class;
int id;
} student;
student が struct キーワードの後にある場合コンパイラはこれをとして構造体のタグ認識します。student がメンバー選択演算子の後に – >。(または) がある場合名前は構造体メンバーを示します。他のコンテキストではstudent は構造体変数です。ただしタグの名前空間をオーバーロードする方法が生じるためお勧めしません。