新聞中心
為了能夠把程序分成多個(gè)邏輯部分來進(jìn)行編寫。C++支持分離式編譯1機(jī)制,這個(gè)機(jī)制使我們可以將程序分割成若干個(gè)文件,每個(gè)文件都可以被獨(dú)立編譯。

那我們將一整個(gè)程序切割成了多個(gè)文件,為了使這些文件聯(lián)系起來,則肯定需要有一種文件間可以共享代碼的方式。例如,一個(gè)文件的代碼可能需要使用另一個(gè)文件中定義的變量。
一個(gè)實(shí)際的例子是,std::cout 和 std::cin 它們都定義于標(biāo)準(zhǔn)庫(kù),卻能夠被我們寫的程序所使用。
為了支持分離式編譯,C++將聲明與定義區(qū)分開來。聲明使得名字被程序所知,一個(gè)程序如果想要使用別的文件所定義的名字,就要包含對(duì)那個(gè)名字的聲明,而定義是負(fù)責(zé)創(chuàng)建名字所對(duì)應(yīng)的實(shí)體。
變量聲明規(guī)定了變量的類型與名字,在這一點(diǎn)上定義與之相同,除此之外,定義還申請(qǐng)了變量類型所對(duì)應(yīng)的內(nèi)存空間,也有可能對(duì)變量賦予了初始值。
如果想要聲明一個(gè)變量而不去定義它,就需要在變量類型前加上extern關(guān)鍵字,而且不要顯式的去初始化變量。
extern int a; //聲明變量a
int b; //聲明并定義b;
extern int c = 5; //定義c,并給c賦初始值5。如果c是全局變量,則會(huì)被編譯器給予警告,
//‘extern’變量有一個(gè)初始值。如果是在函數(shù)體內(nèi)部,則會(huì)直接報(bào)錯(cuò)。任何初始化了的變量都會(huì)成為定義。我們可以給extern的變量加上一個(gè)初始值,但這同樣也抵消了extern關(guān)鍵字的作用,使這個(gè)聲明成為了一個(gè)定義。在函數(shù)體內(nèi),初始化一個(gè)extern變量將會(huì)引發(fā)錯(cuò)誤。
如果在多個(gè)文件中需要用到同樣的變量,就必須將變量的聲明與定義分開來寫。變量的定義必須出現(xiàn)在且只能出現(xiàn)在同一個(gè)文件之中,而其他需要用到這個(gè)變量的文件,則需要對(duì)這個(gè)變量進(jìn)行聲明。
一個(gè)變量可以被聲明無數(shù)次,但只能被定義一次。這一點(diǎn)非常重要?。?!
總結(jié)聲明與定義的區(qū)別在于,聲明是讓變量的名字和類型被程序所知,而定義比聲明多申請(qǐng)了一個(gè)內(nèi)存空間。要想只聲明而不定義變量,就需要在變量類型前加上extern關(guān)鍵字。否則就是聲明且定義。任何初始化過的變量都是定義。
??注意:這里只是在將變量的聲明與定義的區(qū)別。和函數(shù)的定義與聲明不同。不要混淆了!??!
函數(shù)也可以多次聲明,但函數(shù)的聲明和變量的區(qū)別在于,函數(shù)的聲明不需要在函數(shù)類型前加extern關(guān)鍵字,而是省略了函數(shù)體。
void count();//聲明了count這個(gè)函數(shù)
void count();//重復(fù)聲明,不會(huì)報(bào)錯(cuò)。分離式編譯模式源于C語(yǔ)言,在C++語(yǔ)言中繼續(xù)沿用。簡(jiǎn)單地說,分離編譯模式是指:一個(gè)程序(項(xiàng)目)由若干個(gè)源文件共同實(shí)現(xiàn),而每個(gè)源文件單獨(dú)編譯生成目標(biāo)文件,最后將所有目標(biāo)文件連接起來形成單一的可執(zhí)行文件的過程。 ??
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
本文標(biāo)題:簡(jiǎn)單說,C++變量聲明與定義的區(qū)別-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)網(wǎng)址:http://www.dlmjj.cn/article/djchej.html


咨詢
建站咨詢
