} } }

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