大中型软件经常由多个程序员共同开发,使用很多变量和函数,变量或函数的命名冲突不可避免地发生。如果所有人的代码都通过了测试,那么在没有问题的情况下组合它们可能会导致命名冲突。
例如,小李和小韩都参与了文件管理系统的开发,该系统定义了表示当前打开的文件的全局变量FP,如果将代码编译在一起,编译器将询问FP重复定义(Redefinition)错误。
为了解决共同开发中的名称冲突问题,C引入了命名空间(Namespace)概念。请看下面的例子。
1.namespace Li{ //定义小李的变量
2.文件FP=空;
3.}
4.namespace Han{ //定义小韩的变量
5.文件FP=空
6.}
小李和小韩分别定义了以自己姓氏为名的命名空间,这时一起编译他们的FP变量就没有问题了。命名空间也称为命名空间、命名空间。
Namespace是c的关键字,以下列语法格式定义命名空间:
Namespace name{
//variables、functions、classes
}
Name是可以包含变量、函数、类、typedef、#define等的命名空间的名称,最后用{}括起来。变量,表示使用函数时变量所在的命名空间。以上述FP变量为例,可以按如下方式使用:
1.Li :3360 FP=fopen ('one.txt '' R ');//使用小李定义的变量FP
2.Han :3360 FP=fopen('' Rb ');//使用小韩定义变量FP
:3360是一个称为域解析运算符的新符号,用于表示c要使用的命名空间。
除了直接使用域确认运算符外,还可以使用using关键字声明。例如:
1.using Li :3360fp
2.FP=fopen('one.txt '' r ');//使用小李定义的变量FP
3.Han :3360 FP=fopen('' Rb ');//使用小韩定义变量FP
在代码开头用using声明了li33603360fp。也就是说,如果在using声明后程序出现未指定命名空间的FP,请使用Li:fp。但是,使用小韩定的FP仍然需要Han:fp。
Using声明不仅可以用于声明命名空间中的一个变量,还可以用于声明整个命名空间。例如:
1.using namespace Li
2.FP=fopen('one.txt '' r ');//使用小李定义的变量FP
3.Han :3360 FP=fopen('' Rb ');//使用小韩定义变量FP
如果命名空间Li中还定义了其他变量,则FP变量也有效果。如果在Using声明后未专门指定命名空间的变量导致命名冲突,则默认情况下将使用命名空间Li中的变量。
除了可以在命名空间内声明或定义变量外,还可以在命名空间内声明或定义命名空间外声明或定义的其他名称,如类、函数、typedef和#define。
从编译和链接的角度来看,代码中出现的变量名、函数名、类名等都是符号(Symbol)。还有一些符号可以参考内存位置,例如变量名和函数名。某些符号只是新名称,例如typedef中定义的类型别名。
名称空间的完整示例代码如下:
1.# include
3.//在命名空间中定义类
4.namespace Diy{
5.class Student{
6.公共:
7.车* name
8.int age
9.float score
10.
11.public:
12.void say(){
13.printf('%s的年龄为%d,成绩为%f\n '名称、age、score);
14.}
15.};
16.}
17.
18.int main(){
19.Diy:Student stu1
20.='小明'
21.=15;
22.=92.5f
23.();
24.
25.返回0;
26.}
运营结果:小明的年龄为15岁,成绩为92.500000
c名称空间的语法相对复杂。本节只讨论冰山一角。有关命名空间的详细信息将在下一章详细说明。