1、作用
解决开发过程中变量名冲突的问题
2、定义语法
- 用户声明的名字空间定义以关键字 namespace 开头,后面是 名字空间的名字。
- 空间名:与变量的命名规则相同,只能由数字、字母、下划线组成,数字不能开头。
- 注意:在没有被其它文件包含的情况下,命名空间中的成员只能在本文件中使用,即使其它文件也定义了相同名字的命名空间。但如果其它文件包含了本文件,则本文件中的命名空间中的成员可以在其它文件以 “命名空间::成员变量” 的格式被使用。
//定义 namespace 空间名 { 在该空间中的变量,函数,......... }; //例子:定义一个命名空间,里面包含变量 a b c namespace XM { int a; int b; int c; };
3、命名空间的成员使用
- 通过域操作符 :: 引用空间中的内容
空间名::变量名//例子: XM::a XM::b XM::c
- 通过using 把整个空间暴露出来
using namespace 空间名 //例子 using namespace XM; //提示:可以使用这种方式把 std 的空间暴露出来,后面使用 cout,cin,endl,cerr 就不需要添加 std::
- 只暴露空间中的某一成员
using 空间名::成员名 //例子: using XM::a; //只暴露XM 空间中的 a 成员
4、命名空间的嵌套
语法:
namespace 空间名1
{
namespace 空间名2
{
//继续不断的定义
.....
}
}
----------------------------------------
//例子:
namespace TX
{
namespace TX1
{
namespace TX2
{
int a=10086;
}
}
}
使用空间中的成员:
1:利用域操作符号引用空间中的成员
TX::TX1::TX2::a
2.暴露
using namespace TX;
using namespace TX1;
using namespace TX2;
3.暴露某一个成员
using TX::TX1::TX2::a;
5、匿名空间
5.1、作用
限制全局变量只能在当前文件中使用(功能与 静态全局变量 相似)
静态局部变量:
1.只能被初始化一次
2.会改变静态变量的生命周期,存放到数据段中
------------------------------------------------------------------
静态全局变量:
只能在当前文件中使用该全局变量
5.2、定义
namespace //不写空间的名称他就是一个匿名空间
{
//填写空间中的成员 , 变量,函数,类 .......
}
例子: 定义一个匿名空间把全局变量限制在本文件中使用
namespace
{
int a=100;
float b=3.14;
}
6、命名空间的跨文件使用
1.把命名空间定义出来
namespace TX
{
int a=10086;
}
2.在使用该空间中的文件进行声明
namespace TX
{
extern a; //声明该空间中的变量 a 是在外部定义的
}
补充:C 和 C++ 的混合编程
当 c++ 程序使用 C 语言接口使用需要声明为外部 C 接口
extern "C"
{
//添加使用到的 C 语言接口头文件
}
//extern "C" 在这里面的内容都采用 gcc 编译器进行编译不使用 g++