C语言也有命名空间,可分位4类命名空间。
创新互联公司主要从事成都网站设计、成都做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务坡头,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:189820811084类命名空间:
所有的标签(label)都属于同一个命名空间。说明:①在同一个函数内,你的标签不能相同。②在同一个函数内,标签可以和其他变量名称相同。因为它们所属的命名空间不同。
struct
、enum
和union
的名称,在 C99 中称之为 tag,所有的 tag 属于同一个命名空间。也就是说,如果你已经声明struct A { int a };
就不能再声明union A{ int a };
了。
之所以让所有的 tag 组成一个命名空间,由于 tag 前面总是带struct
,enum
或union
关键字,所以编译器可以将它们与其他的标识符区分开。
struct
和union
的成员属于一个命名空间,而且是相互独立的。例如:如果你已经声明struct A { int a };
,其成员的名称为a
,你仍然可以声明 struct B{ int a };
或者union B{ int a };
。之所以让struct
和union
的成员各自成为一个命名空间,是因为它们的成员访问时,需要通过 “.”或”->”运算符,而不会单独使用,所以编译器可以将它们与其他的标识符区分开。由于枚举类型enum
的成员可以单独使用,所以枚举类型的成员不在这一名称空间内。
其他所有的标识符,属于同一个名称空间。包括变量名、函数名、函数参数,宏定义、typedef
的类型名、enum
的成员 等等。注意:如果标识符出现重名的情况,宏定义会覆盖所有其它标识符,这是因为它在预处理阶段而不是编译阶段处理。除了宏定义之外其它类别的标识符,处理规则是:内层作用域会隐藏掉外层作用域的标识符。
平时写 C 程序从来没有想过 C 语言还有命名空间这事,有什么用呢?在《 C 语言接口与实现》这本神作中,大量使用typedef struct T *T;
这种形式(其中T
就是struct T *
)的用法,遵循一定的约定,利用 C 语言的这种简单的命令规则也可以获得一些好处,使代码更精巧,可读性更好。
更多技术分享:Virbox 技术博客
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。