extern可置於變量或者函數前,以表示變量或者函數的定義在別的文件中,提示編譯器遇到此變量和函數時在其餘模塊中尋找
其定義。
另外,extern也可用來進行連接指定。
用法分析:
在一個變量前加extern 好比:extern unsigned int Test;
編譯器編譯的時候,會把Test當成是外部的!會在其餘地方尋找Test這個變量的定義,若是隻加extern那麼編譯器就會報錯!
好比這樣:
1>main.obj : error LNK2001: 沒法解析的外部符號 "int Test" (?Test@@3HA)
1>E:\wtl\test\test\Debug\test.exe : fatal error LNK1120: 1個沒法解析的外部命令
由於extern關鍵字只是說明咱們從外部引用了一個變量,該變量的值叫Test,提醒編譯器要到其餘文件中查找該變量!
要想不報錯,在其餘文件加int Test 定義一個名字叫Test的變量吧。這樣就能編譯經過。
那麼假設我有個main.c,source1.c,source2.c那麼我想要在main裏面定義一個變量,在source1.c跟source2.c都能使用該如何作?
很簡單,先在main.c中定義一個值:int data;
那麼在兩個點c文件中都加上:extern int data,
這個變量能被這三個.c文件共用了,至關於一個全局變量。
示例代碼:函數
//Main.c #include #include "source1.h" #include "source2.h" int data; using namespace std; void main() { data = 4; adddata2(); cout<<data<<endl; adddata1(); cout<<data<<endl; cout<<"hello world "<<endl; } //Source1.c #include "source2.h" using namespace std; extern int data; void adddata2() { data = data + 10; } //Source.h #ifndef __SOURCE1_H__ #define __SOURCE1_H__ #include void adddata1(); #endif //Source2.c #include "source1.h" using namespace std; extern int data; void adddata1() { data = data + 100; } //Source2.h #ifndef __SOURCE2_H__ #define __SOURCE2_H__ #include void adddata2(); #endif
多個c文件共享同一個變量(全局變量)
當你聲明一個變量的時候是這樣 unsigned int data = 0;
當你在另外一個源文件中想使用這個變量的時候。
只須要加關鍵字:extern unsigned int data;
(注意,這只是說明這個data是外部的變量,實際上並不分配存儲空間的。也就是不能初始化!)spa