命名空間
編譯器會設定 「 命名空間"來區別針對不同種類的項目所使用的識別項。 每個命名空間中的名稱必須是唯一,若要避免衝突,但是相同的名稱可以出現在一個以上的命名空間。 這表示您可以使用相同的識別項的兩個或多個不同的項目,前提是在不同的命名空間中的項目。 編譯器可解析語法中程式的識別項的內容為基礎的參考。
注意事項 |
---|
請勿混淆有限 c 與 C++ 的 「 命名空間 」 功能的命名空間的概念。請參閱命名空間 c+ + 語言參考如需詳細資訊。 |
這份清單將告訴您使用 c 的命名空間
陳述式標籤
具名的陳述式的標籤是陳述式的一部分。 定義陳述式標籤永遠後接冒號但不是屬於案例標籤。 使用的陳述式標籤永遠必須立即接在關鍵字goto。 陳述式的標籤並沒有與其他名稱或標籤的其他函式的名稱。結構、 等位,列舉型別標籤
這些標記會屬於結構、 等位,列舉型別規範中,而且如果有的話,一定會立即接在保留的字struct, 等位,或enum。 標籤名稱必須不同於所有其他結構、 列舉型別或等位的標記,具有相同的可視性。結構或等位的成員
成員名稱會配置在每個結構和等位型別相關聯的命名空間。 也就是相同的識別項可以是任意數量的結構或等位中的元件名稱,一次。 元件名稱的定義永遠口中結構或等位型別規範。 使用元件的名稱一律必須立即接在成員選取運算子 (-> 和 .). 成員名稱中必須是唯一的結構或等位,但它並沒有與其他的程式中,包含不同的結構和等位,成員名稱的名稱或結構本身的名稱。一般的識別項
所有其他的名稱都屬於命名空間,其中包含變數、 函式 (包括型式參數和區域變數) 和列舉型別常數。 識別項名稱具有可視性而定,巢狀結構,因此您可以在區塊內重新定義它們。Typedef 名稱
Typedef 名稱不能與相同範圍中的識別項。
舉例來說,因為結構標記、 結構成員和變數名稱有三種不同的命名空間中,三個項目名稱student在這個範例不會衝突。 每個項目的內容可讓每個項目之正確解譯student在程式中。 (如結構的相關資訊,請參閱結構宣告。)
struct student {
char student[20];
int class;
int id;
} student;
當student後面出現struct關鍵字,編譯器會認為它為結構的標籤。 當student就會出現在 [成員選取運算子之後 (-> 或 .),為結構成員的參照的名稱。 在其他情況中, student結構變數的參考。 不過,多載化的標記名稱空間建議您不要因為它會遮住意義。