C語言中的命名空間

2022-08-12 16:06:11 字數 898 閱讀 1191

命名空間是為了解決 「在相同作用域內如何區分 相同的識別符號」。

說明:①只有在相同作用域的情況下才能使用到命名空間去區分識別符號,在巢狀的作用域、不同的作用域區分識別符號都用不到命名空間的概念。

②在相同的作用域內,如果命名空間不同,識別符號可以使用相同的名稱。否則,即如果命名空間不同,編譯器會報錯,提示重複定義。

按照c99(章節6.2.3),命名空間可以分為四種:

所有的標籤(label)都屬於同乙個命名空間。 說明:①在同乙個函式內,你的標籤不能相同。②在同乙個函式內,標籤可以和其他變數名稱相同。因為它們所屬的命名空間不同。

struct、enum和union的名稱,在c99中稱之為tag,所有的tag屬於同乙個命名空間。 也就是說,如果你已經宣告struct a ; 就不能在宣告 union a;說明:之所以讓所有的tag組成乙個命名空間,由於tag前面總是帶struct,enum或union關鍵字,所以編譯器可以將它們與其他的識別符號區分開。

2.3 struct和union的成員屬於乙個命名空間,而且是相互獨立的。例如:如果你已經宣告struct a ;其成員的名稱為a,你仍然可以宣告 struct b;或者union b; 說明:之所以讓struct和union的成員各自成為乙個命名空間,是因為它們的成員訪問時,需要通過 "."或"->"運算子,而不會單獨使用,所以編譯器可以將它們與其他的識別符號區分開。由於列舉型別enum的成員可以單獨使用,所以列舉型別的成員不在這一命名空間內。

4.其他所有的識別符號,屬於同乙個命名空間。包括變數名、函式名、函式引數,巨集定義、typedef的型別名、enum的成員 等等。注意:如果識別符號出現重名的情況,巨集定義覆蓋所有其它識別符號,這是因為它在預處理階段而不是編譯階段處理。除了巨集定義之外其它類別的識別符號,處理規則是:內層作用域會隱藏掉外層作用域的識別符號。

節選自:

C 語言 08 命名空間

命名空間通常作為附加資訊來區分不同庫中相同名稱的函式 類 變數。命名空間的本質是定義乙個範圍,該範圍即為乙個上下文,乙個上下文中通常不允許出現相同名稱的函式 類 變數。命名空間中函式或變數的呼叫 使用範圍解析運算子呼叫命名空間中的函式或變數 namespace name variable names...

spring p命名空間 c命名空間

p命名空間 1.需要引入命名空間p 並不真實存在 是在spring內部中實現的 xmlns p 2.如果是引用注入需要加 ref字尾 p和c命名空間 並不適用於集合引數 c命名空間 1.需要引入命名空間c 並不真實存在 是在spring內部中實現的 xmlns c 2.可以使用c 引數名 或c 引數...

c 中regex的命名空間 c 命名空間

system.transactions 命名空間 注意 此命名空間在 net framework 2.0 版中是新增的。使用 system.transactions 命名空間包含的類可以編寫自己的事務應用程式和資源管理器。具體地說,可以建立和參與 與乙個或多個參與者 本地或分布式事務。system....