從C語(yǔ)言編譯器的角度來看,函數(shù)聲明只是一種協(xié)議,它告訴了調(diào)用者在調(diào)用這個(gè)函數(shù)之前需要給他什么參數(shù),一般參數(shù)是通過寄存器或者壓棧的方式傳給被調(diào)用函數(shù)的,具體這些參數(shù)如何使用以及返回什么值到相應(yīng)的寄存器里返回給調(diào)用者則是定義所描述的。
創(chuàng)新互聯(lián)一直通過網(wǎng)站建設(shè)和網(wǎng)站營(yíng)銷幫助企業(yè)獲得更多客戶資源。 以"深度挖掘,量身打造,注重實(shí)效"的一站式服務(wù),以網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、移動(dòng)互聯(lián)產(chǎn)品、成都全網(wǎng)營(yíng)銷推廣服務(wù)為核心業(yè)務(wù)。十多年網(wǎng)站制作的經(jīng)驗(yàn),使用新網(wǎng)站建設(shè)技術(shù),全新開發(fā)出的標(biāo)準(zhǔn)網(wǎng)站,不但價(jià)格便宜而且實(shí)用、靈活,特別適合中小公司網(wǎng)站制作。網(wǎng)站管理系統(tǒng)簡(jiǎn)單易用,維護(hù)方便,您可以完全操作網(wǎng)站資料,是中小公司快速網(wǎng)站建設(shè)的選擇。
C語(yǔ)言的函數(shù)定義格式是:
函數(shù)類型 函數(shù)名稱 ( 參數(shù)列表 )
{
//函數(shù)體
}
函數(shù)聲明,不是說明的格式是“函數(shù)定義格式”的第一行,然后加 “;”,即:
函數(shù)類型 函數(shù)名稱 ( 參數(shù)列表 );
特別地,在函數(shù)聲明中的參數(shù)列表中,不需要給出具體的變量名稱,但必須給出每個(gè)變量的類型。
如果是指變量的聲明和定義:
從編譯原理上來說,聲明是僅僅告訴編譯器,有個(gè)某類型的變量會(huì)被使用,但是編譯器并不會(huì)為它分配任何內(nèi)存。而定義就是分配了內(nèi)存。
對(duì)于下面的兩句代碼:
void Func()
{
int a;
int b=1;
a=0;
}
對(duì)于第一行代碼,編譯器不會(huì)做任何事,它不會(huì)為它在棧中分配一點(diǎn)東西,直到第三句,a=0;時(shí),編譯器才會(huì)將其壓入棧中。而對(duì)于int b=0;這一句,編譯器就會(huì)生成一條指令,為它賦值。如果反匯編,看到的代碼可能是這樣的:
push 1;
push 0;
當(dāng)然,并不一定編譯器就會(huì)樣做,也有可能在聲明int a時(shí),編譯器就會(huì)把一個(gè)廢值入棧,到第三條再為其賦值,這要看編譯器的具體取舍,所以,聲明不一定不是定義,而定義一定是定義。
但是,下面的聲明,一定僅僅是聲明:
extern int a;
這表時(shí),有一個(gè)int變量a,它一定是在另外其他地方定義的,所以編譯器此時(shí)一定不會(huì)做什么分配內(nèi)存的事,因?yàn)樗褪锹暶鳎瑑H僅表明下面的代碼引用了一個(gè)符號(hào),而這個(gè)符號(hào)是int類型的a而已。
如果是指函數(shù)的聲明和定義:
聲明:一般在頭文件里,對(duì)編譯器說:這里我有一個(gè)函數(shù)叫function() 讓編譯器知道這個(gè)函數(shù)的存在。
定義:一般在源文件里,具體就是函數(shù)的實(shí)現(xiàn)過程 寫明函數(shù)體。
樓主可以這樣想,C語(yǔ)言中,無論是常量,變量,函數(shù),只有先定義才能使用的。在函數(shù)定義時(shí),大腦要往一般的常量,變量定義的方向,切忌先不要想函數(shù)的別的。定義好后,把函數(shù)的定義先放一邊,不管它。
接著是函數(shù)聲明,大家都知道,C語(yǔ)言是有一個(gè)主函數(shù)main()和0或n個(gè)普通函數(shù)組成的。由于當(dāng)代碼越長(zhǎng),用到的函數(shù)就越多,為了減少函數(shù)的混淆,所以要有個(gè)函數(shù)名,就像老師點(diǎn)名一樣,聲明一個(gè)函數(shù),就如點(diǎn)一個(gè)學(xué)生的名字。
總之,函數(shù)定義是系統(tǒng)要求的,不定義就錯(cuò)誤,而函數(shù)聲明實(shí)際上不定義也行,但為了方便和減少錯(cuò)誤,人為規(guī)定要聲明。
文章名稱:c語(yǔ)言函數(shù)的定義與聲明 c語(yǔ)言的函數(shù)的定義
本文網(wǎng)址:http://muchs.cn/article2/doecooc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、微信公眾號(hào)、虛擬主機(jī)、域名注冊(cè)、標(biāo)簽優(yōu)化、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)