程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> namespace命名空間與define預處理

namespace命名空間與define預處理

編輯:C++入門知識

在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取的是最新的值,也就說預處理語句沒有命名空間的概念,無論你定義在哪個命名空間對於程序來說都是可見的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved