記得還是大二的時(shí)候,只會(huì)if else這些,所有的代碼都是在同一個(gè)main.c文件中!。∵@是何等的搞笑啊,現(xiàn)在想想都覺(jué)得好笑,不過(guò)很開(kāi)心我現(xiàn)在終于會(huì)把自己寫(xiě)的東西保存起來(lái),因?yàn)闆](méi)準(zhǔn)哪天會(huì)用到,畢竟自己寫(xiě)的,自己知道怎么去改,既然當(dāng)了程序員,那么就要將基礎(chǔ)學(xué)好咯,以上都是廢話(huà)。
This isa 華麗的分割線(xiàn)---------------- 多個(gè)源文件共享同個(gè)變量的方法當(dāng)然就是extern關(guān)鍵字了 extern:extern可置于變量或者函數(shù)前,以表示變量或者函數(shù)的定義在別的文件中,提示編譯器遇到此變量和函數(shù)時(shí)在其他模塊中尋找其定義。另外,extern也可用來(lái)進(jìn)行鏈接指定。 現(xiàn)做如下解釋?zhuān)?/font> 我們可以在一個(gè)變量前加一個(gè)extern比如:extern unsigned int Test; 那么加上這句話(huà)之后,編譯器編譯的時(shí)候(別問(wèn)我編譯是什么意思)會(huì)把Test當(dāng)成是外部的!會(huì)在其他地方尋找Test這個(gè)變量的定義,如果你只加了個(gè)extern那么編譯器就會(huì)報(bào)錯(cuò)滴!比如這樣: 1>main.obj: error LNK2001: 無(wú)法解析的外部符號(hào) "int Test"(?Test@@3HA) 1>E:\wtl\test\test\Debug\test.exe : fatalerror LNK1120: 1 個(gè)無(wú)法解析的外部命令 那么就說(shuō)明,其實(shí)我們這個(gè)extern關(guān)鍵字只是說(shuō)明我們從外部引用了一個(gè)變量,該變量的值叫Test,提醒編譯器要到其他文件中查找該變量! 要想不報(bào)錯(cuò),在其他文件加個(gè)int Test定義一個(gè)名字叫Test的變量吧。這樣就能編譯通過(guò)啦,貌似有點(diǎn)離題。表緊!我們趕緊回頭, 那么假設(shè)我有個(gè)main.c,source1.c,source2.c那么我想要在main里面定義一個(gè)變量,在source1.c跟source2.c都能使用該如何做?很簡(jiǎn)單,先在main.c中定義一個(gè)值:int data; 那么在兩個(gè)點(diǎn)c文件中都加上:externintdata,那么,恭喜你,這個(gè)變量能被這三個(gè).c文件共用了,相當(dāng)于一個(gè)全局變量了吧。 示例代碼: Main.c #include #include "source1.h" #include "source2.h" intdata; 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 如上是結(jié)果, 大家自己理解哈~~~ goodnight~~~ 其實(shí)想想原理挺容易懂的 當(dāng)你聲明一個(gè)變量的時(shí)候是這樣 unsigned int data =0; 當(dāng)你在另一個(gè)源文件中想使用這個(gè)變量的時(shí)候。只需要加關(guān)鍵字:externunsigned intdata;(注意,這只是說(shuō)明這個(gè)data是外部的變量,實(shí)際上并不分配存儲(chǔ)空間的。也就是不能初始化!)這樣就很Ok啦。
|