namespace命名空间与define预处理

本文探讨了C++中的命名空间namespace与预处理指令#define的差异。namespace用于定义作用域,而#define创建宏,两者在作用和使用上有所不同。通过示例代码,解释了它们在实际编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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取的是最新的值,也就说预处理语句没有命名空间的概念,无论你定义在哪个命名空间对于程序来说都是可见的

转载于:https://www.cnblogs.com/totopper/archive/2013/05/26/namespacedefine.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值