extern關鍵字的用法有如下幾種:
一 引入其它文件中定義的全局變量或函數 (不能是static修飾的,因為static修飾的變量或函數的作用域只存在於當前文件)
比如 在a.c文件中定義了一個全局變量和函數:
int num = 5; int funca() { ... }
若想在b.c文件中引用a.c文件里的全局變量與函數,可以在b.c文件中使用extern來導入:
extern int num; extern int funca();
這樣就可以在b.c文件中引用a.c的變量num和函數funca了。
二 如果在.cpp里調用了c庫中定義的函數,那么需要將c庫中的函數使用 extern "C" 來防止這些函數被C++中的命名重整(name manling)修改名字,
造成無法找到對應的c函數。 比如:
c庫中定義實現了如下函數:
int func1(int x); int func2(char *str);
如果要在.cpp中使用這些函數,必須通過下面的形式導入:
extern "C" int func1(int x); extern "C" int func2(char *str);
或者:
extern "C" { int func1(int x); int func2(char *str); }
這樣,C++就不會對extern "C"包含的函數func1,func2進行命名重整了。才能夠根據函數名找到對應的函數。