假如你使用一個程序庫,他裏面有桓霰淞拷衋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
不是很理解什麼個原理,還希望知道的人幫忙講明白,萬分感謝!!