码迷,mamicode.com
首页 > 其他好文 > 详细

namespace命名空间与define预处理

时间:2016-05-05 09:44:10      阅读:360      评论:0      收藏:0      [点我收藏+]

标签:

在c++语言中是namespace是定义命名空间,或者说是定义作用域,在c++中最常见的划分作用域是使用{},同时C++里有define关键词,用来定义一个宏,或者说是预处理变量,那么这种预处理变量与namespace又如何去划分呢?示例代码如下:

#include <iostream>
using std::endl;
using std::cout;
namespace test1
{
	#define MYSIZE 1000
	const int size = 10000;
	int a = 10;
};
namespace test2
{
	#define MYSIZE 2000
	const int size = 20000;
	int a = 20;

}
int a = 40;
int main()
{
	int a = 30;
	cout<<"test1::MYSIZE="<<MYSIZE<<endl;

	cout<<"test2::MYSIZE="<<MYSIZE<<endl;
	cout<<"test1::size="<<test1::size<<endl;

	cout<<"test2::size="<<test2::size<<endl;
	cout<<"test1::a="<<test1::a<<endl;

	cout<<"test2::a="<<test2::a<<endl;
	cout<<"main::a="<<a<<endl;
	cout<<"global::a="<<::a<<endl;
	return 0;
}

该示例除了说明namespace与define的区别之外,还附带了命名空间的作用域问题,首先需要说明的是代码不能这样写:

cout<<"test1::MYSIZE="<<test1::MYSIZE<<endl;

cout<<"test2::MYSIZE="<<test2::MYSIZE<<endl;

编译错误如下:
namespacedefine.cpp:20:33: error: expected unqualified-id before numeric constant
namespacedefine.cpp:20:33: error: expected ‘;’ before numeric constant
namespacedefine.cpp:21:33: error: expected unqualified-id before numeric constant
namespacedefine.cpp:21:33: error: expected ‘;’ before numeric constant
于是使用示例中的代码,编译时有warning:
namespacedefine.cpp:12:0: warning: "MYSIZE" redefined [enabled by default]
namespacedefine.cpp:6:0: note: this is the location of the previous definition
大概说是变量重复定义,表示MYSIZE重复定义了,再看看输出结果:sdoning@ubuntu:~/practice$ ./a.out
test1::MYSIZE=2000
test2::MYSIZE=2000
test1::size=10000
test2::size=20000
test1::a=10
test2::a=20
main::a=30
global::a=40
发现MYSIZE取的是最新的值,也就说预处理语句没有命名空间的概念,无论你定义在哪个命名空间对于程序来说都是可见的

namespace命名空间与define预处理

标签:

原文地址:http://www.cnblogs.com/shouce/p/5460465.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!