c++動態庫中使用命名空間的問題

這是C++纔會有的語言特性.
假如你使用一個程序庫,他裏面有桓霰淞拷衋bc,但是你自己也不小心定義了一個叫abc的變量,這樣就會引起重定義錯誤.所以爲了避免這種現象,C++引入了名字空間(namespace)的概念,編寫程序庫的時候最好把所有東西放在一個namespace中,例如
namespace MY
{
int abc;
char cab;
}
這樣,你在外界就要通過MY::abc來訪問MY裏面的abc,而如果你自己在外面定義了一個叫abc的變量,不會引起重定義的錯誤.直接調用abc會調用你自己定義的abc,而只有用MY:abc纔會真正調用出MY裏面的abc
但是這樣未免太麻煩,如果你確保你不會重複使用別人程序庫裏的名字,你就可以把他的名字空間裏所有名字全部調出,這個過程就是using namespace,例如我輸入
using namespace MY;

這樣,下面我再調用abc時,就會自動調用MY裏面的abc了

////////////////////////////////////////////////////////////////////////////////////////////////////////////

extern "C"  按照C規則編譯,即按函數名編譯(不能重載),估計C規則沒有namespace 

可是小編髮現,導出的動態c++庫中使用下面這樣的格式沒問題:

#ifdef __cplusplus
extern "C" {
#endif

.......

#ifdef __cplusplus
};
#endif

不是很理解什麼個原理,還希望知道的人幫忙講明白,萬分感謝!!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章