C语言中是不存在命名空间的概念的,因为整个C语言工程就是一个大型的命名空间。当工程规模小时,不会产生大问题;但是一旦工程的规模大,会用到大量的动态库,尤其是第三方开发的动态库时往往就会遇到命名冲突的问题。因为不同的厂家开发的动态库中全局变量的命名很可能重复,为了避免这个问题,C++中新增了命名空间这一概念,使得通过命名空间的限定从而使用相同名称的全局变量。

命名空间的用法:

方法一:using namespace xxx
方法二:xxx::函数名

通过C++的标准库iostream来对上述两种使用方式进行举例说明。

#方法一:
#include "iostream"
using namespace std;
int main()
{
    cout << "test namespace" << endl;
    return 1;
}

#方法二:
#include "iostream"
int main()
{
    std::cout << "test namespace" << std::endl;
    return 1;
}

Note:需要注意iostreamiostream.h的区别,前者是C++中最新的速度更快的标准库,而后者是最早期版本的标准库且其内部没有命名空间这一说法。目前都用前者。

代码举例



#include "stdafx.h"
#include "iostream"

namespace BigHouse
{
	int price = 100000;
	namespace State
	{
		struct housestate
		{
			int area=1000;
			int tall=1000;
		};
	}
}
namespace SmallHouse
{
	int price = 100;
	namespace State
	{
		struct housestate
		{
			int area = 10;
			int tall = 10;
		};
	}
}


int main()
{
	BigHouse::State::housestate BigHouseState;
	SmallHouse::State::housestate SmallHouseState;
	std::cout << "BigHouse price:"<< BigHouse::price << std::endl;
	std::cout << "BigHouse area:" << BigHouseState.area << std::endl;
	std::cout << "BigHouse tall:" << BigHouseState.tall << std::endl;
	std::cout << "SmallHouse price:" << SmallHouse::price << std::endl;
	std::cout << "SmallHouse area:" << SmallHouseState.area << std::endl;
	std::cout << "SmallHouse tall:" << SmallHouseState.tall << std::endl;

	system("spase");
}




最终输出结果如下图所示:
C++ | 命名空间_namespace_命名空间