欢迎来到天天文库
浏览记录
ID:8808042
大小:31.50 KB
页数:3页
时间:2018-04-08
《c语言命名空间详解》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、C语言命名空间详解C语言命名空间分析准则:1、在同一命名空间、相同作用域中,任何名字须具有唯一性2、每个结构和联合内部都有自己的命名空间(独立于其他空间)3、结构标签、联合标签、枚举标签共用一个命名空间(独立于其他空间)4、goto使用的标签名,只要在同一函数内部唯一(独立于其他空间)5、所有其他情况共用一个命名空间,如变量、所有枚举常量、typedef定义的别名等(独立于其他空间)6、#define宏有点特殊,宏覆盖所有命名空间,所有和宏同名的在预处理时都会被替换为宏,只要替换后没有语法错误,这种替换就在神不知鬼不觉中进行。一个能
2、够完整说明问题的例子#include#include//可以开关这个宏定义//并用gcc-Emain.c-omain.i来看宏的效果//#definemsghahastructmsg//【结构标签命名空间】{intmsg;//【结构内部的命名空间】,只需在结构内部唯一即可};unionu_msg//【联合标签命名空间】和结构、枚举标签共用一个命名空间,故这里//不能再用msg或e_msg{intmsg;//联合内部的命名空间,只需在联合内部唯一即可};//【其他命名空间】intmsg;//这里可
3、以用msg,只要【其他命名空间】中唯一即可typedefunsignedintuint;enume_msg//【枚举标签命名空间】和结构、联合标签共用一个命名空间,故这里//不能再用msg或u_msg{zero=0,//枚举常量也属于【其他命名空间】部分one,two,};voidfunc(void){msg://【标签名命名空间】,只要在函数内部唯一即可return;}intmain(intargc,char*argv[]){structmsg//较小作用域覆盖全局作用域的定义{char*msg;}msg;enume_msg{ze
4、ro=0,one,five,};msg://标签名命名空间,只要在函数内部唯一即可return0;}当打开#definemsghaha宏定义后,查看经预处理后源码文件main.i最后部分大致如下:structhaha{inthaha;};unionu_msg{inthaha;};inthaha;typedefunsignedintuint;enume_msg{zero=0,one,two,};voidfunc(void){haha:return;}intmain(intargc,char*argv[]){structhaha{cha
5、r*haha;}haha;enume_msg{zero=0,one,five,};haha:return0;}可见预处理器把所有与宏相同的符号都进行了文本替换,只要替换后没有语法错误,就能通过编译。
此文档下载收益归作者所有