extern的作用:
定義:extern是計算機語言中的一個關鍵字,可置於變量或者函數前,以表示變量或者函數的定義在別的文件中。提示編譯器遇到此變量或函數時,在其它模塊中尋找其定義,另外,extern也可用來進行鏈接指定。
舉個栗子:
extern_test.h文件
#ifndef EXTERN_TEST_H
#define EXTERN_TEST_H
int a = 10;
#endif // EXTERN_TEST_H
main.cpp 文件
#include <iostream>
using namespace std;
extern int a;
int main(int argc, char *argv[])
{
return 0;
}
main.cpp文件需要用到另一個文件的全局變量a,需要用extern int a;
注意:extern 後面修飾的只能是一個全局變量。
使用extern "C"的目的:
首先,你需要明白一點,C++在編譯函數和變量的時候會進行傾軋(就是支持重載,將函數重載成一個特定的名字,而C語言不支持重載),而當C++調用的C語言函數庫是已經編譯好的,是用C的方法編譯的,所以如果你還是按照正常思路調用C庫函數的話(如果不在頭文件中加extern "C"),就會出現在頭文件中的函數被傾軋,而庫函數不傾軋,會鏈接出錯,所以C++就在調用C語言的頭文件里加了extern "C",這樣兩邊都不傾軋就可以了。簡單來說:extern "C" 實現了C頭文件與C庫函數裏編譯代碼的統一。下面是C頭文件中的代碼:
#ifndef _INC_STDIO
#define _INC_STDIO
#include <crtdefs.h>
#include <_mingw_print_push.h>
#pragma pack(push,_CRT_PACKING)
#ifdef __cplusplus
extern "C" {
#endif
頭文件里加了extern "C"指示C++編譯器不要對所包含的代碼進行傾軋,所以C頭文件裏的代碼和庫文件裏的代碼就實現了統一。
也就是說使用extern "C"的時候,要在聲明和定義處同時使用。