namespace定名空间与define预处理惩罚
添加时间:2013-5-26 点击量:
在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取的是新的值,也就说预处理惩罚语句没有定名空间的概念,无论你定义在哪个定名空间对于法度来说都是可见的。原来,再大的房子,再大的床,没有相爱的人陪伴,都只是冰冷的物质。而如果身边有爱人陪伴,即使房子小,床小,也觉得无关紧要,因为这些物质上面有了爱的温度,成了家的元素。—— 何珞《婚房》#书摘#
在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;
}
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取的是新的值,也就说预处理惩罚语句没有定名空间的概念,无论你定义在哪个定名空间对于法度来说都是可见的。原来,再大的房子,再大的床,没有相爱的人陪伴,都只是冰冷的物质。而如果身边有爱人陪伴,即使房子小,床小,也觉得无关紧要,因为这些物质上面有了爱的温度,成了家的元素。—— 何珞《婚房》#书摘#