樓主可以這樣想,C語言中,無論是常量,變量,函數(shù),只有先定義才能使用的。在函數(shù)定義時,大腦要往一般的常量,變量定義的方向,切忌先不要想函數(shù)的別的。定義好后,把函數(shù)的定義先放一邊,不管它。

創(chuàng)新互聯(lián)專注于新樂網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供新樂營銷型網(wǎng)站建設(shè),新樂網(wǎng)站制作、新樂網(wǎng)頁設(shè)計、新樂網(wǎng)站官網(wǎng)定制、成都微信小程序服務(wù),打造新樂網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供新樂網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
接著是函數(shù)聲明,大家都知道,C語言是有一個主函數(shù)main()和0或n個普通函數(shù)組成的。由于當(dāng)代碼越長,用到的函數(shù)就越多,為了減少函數(shù)的混淆,所以要有個函數(shù)名,就像老師點(diǎn)名一樣,聲明一個函數(shù),就如點(diǎn)一個學(xué)生的名字。
總之,函數(shù)定義是系統(tǒng)要求的,不定義就錯誤,而函數(shù)聲明實(shí)際上不定義也行,但為了方便和減少錯誤,人為規(guī)定要聲明。
如果是指變量的聲明和定義:
從編譯原理上來說,聲明是僅僅告訴編譯器,有個某類型的變量會被使用,但是編譯器并不會為它分配任何內(nèi)存。而定義就是分配了內(nèi)存。
對于下面的兩句代碼:
void Func()
{
int a;
int b=1;
a=0;
}
對于第一行代碼,編譯器不會做任何事,它不會為它在棧中分配一點(diǎn)東西,直到第三句,a=0;時,編譯器才會將其壓入棧中。而對于int b=0;這一句,編譯器就會生成一條指令,為它賦值。如果反匯編,看到的代碼可能是這樣的:
push 1;
push 0;
當(dāng)然,并不一定編譯器就會樣做,也有可能在聲明int a時,編譯器就會把一個廢值入棧,到第三條再為其賦值,這要看編譯器的具體取舍,所以,聲明不一定不是定義,而定義一定是定義。
但是,下面的聲明,一定僅僅是聲明:
extern int a;
這表時,有一個int變量a,它一定是在另外其他地方定義的,所以編譯器此時一定不會做什么分配內(nèi)存的事,因?yàn)樗褪锹暶鳎瑑H僅表明下面的代碼引用了一個符號,而這個符號是int類型的a而已。
如果是指函數(shù)的聲明和定義:
聲明:一般在頭文件里,對編譯器說:這里我有一個函數(shù)叫function() 讓編譯器知道這個函數(shù)的存在。
定義:一般在源文件里,具體就是函數(shù)的實(shí)現(xiàn)過程 寫明函數(shù)體。
聲明與定義的區(qū)別:
函數(shù)的聲明與函數(shù)的定義形式上十分相似,但是二者有著本質(zhì)上的不同。聲明是不開辟內(nèi)存的,僅僅告訴編譯器,要聲明的部分存在,要預(yù)留一點(diǎn)空間。定義則需要開辟內(nèi)存。
函數(shù)的定義
函數(shù)的定義是一個完整的函數(shù)單元,包含函數(shù)類型、函數(shù)名、形參及形參類型、函數(shù)體等。在程序中,函數(shù)的定義只能有一次。函數(shù)首部與花括號間不加分號。
函數(shù)的聲明
函數(shù)聲明只是對編譯系統(tǒng)的一個說明:函數(shù)聲明是對定義的函數(shù)的返回值的類型說明,以通知系統(tǒng)在本函數(shù)中所調(diào)用的函數(shù)是什么類型。不包含函數(shù)體(或形參),調(diào)用幾次該函數(shù)就應(yīng)在各個主調(diào)函數(shù)中做相應(yīng)聲明。函數(shù)聲明是一個說明語句,必須以分號結(jié)束。
拓展資料:
C語言編譯系統(tǒng)是由上往下編譯的.一般被調(diào)函數(shù)放在主調(diào)函數(shù)后面的話,前面就該有聲明.不然C由上往下的編譯系統(tǒng)將無法識別。正如變量必須先聲明后使用一樣,函數(shù)也必須在被調(diào)用之前先聲明,否則無法調(diào)用!函數(shù)的聲明可以與定義分離,要注意的是一個函數(shù)只能被定義一次,但可以聲明多次。
函數(shù)聲明由函數(shù)返回類型、函數(shù)名和形參列表組成。形參列表必須包括形參類型,但是不必對形參命名。這三個元素被稱為函數(shù)原型,函數(shù)原型描述了函數(shù)的接口。定義函數(shù)的程序員提供函數(shù)原型,使用函數(shù)的程序員就只需要對函數(shù)原型編輯即可。
從C語言編譯器的角度來看,函數(shù)聲明只是一種協(xié)議,它告訴了調(diào)用者在調(diào)用這個函數(shù)之前需要給他什么參數(shù),一般參數(shù)是通過寄存器或者壓棧的方式傳給被調(diào)用函數(shù)的,具體這些參數(shù)如何使用以及返回什么值到相應(yīng)的寄存器里返回給調(diào)用者則是定義所描述的。
聲明跟定義的最大區(qū)別就是聲明后面有分號,而定義沒有,再者就是聲明函數(shù)中的形參可以只寫類型,寫參數(shù)名,但是定義一定要全寫
有區(qū)別的,函數(shù)聲明以分號結(jié)尾,函數(shù)定義后跟函數(shù)體
具體形式上可以相同,但聲明也可以用省略模式,比如:
int f(int a,int b) { return a+b; }
其聲明可以是:int f(int a,int b);
也可以是:int f(int,int);
標(biāo)題名稱:c語言中函數(shù)的定義和聲明 c++中函數(shù)的聲明與定義
文章URL:http://chinadenli.net/article26/doohdcg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站策劃、自適應(yīng)網(wǎng)站、網(wǎng)頁設(shè)計公司、App設(shè)計、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)