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