原型聲明——告訴編譯器有這么一個原型(編譯器在掃描到它時會作一個記錄)。
創(chuàng)新互聯(lián)建站是一家專業(yè)提供策勒企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站制作、網(wǎng)站建設(shè)、H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為策勒眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。
在引用到這么一個原型時,編譯器會檢查記錄中有無此原型,如果無此原型,編譯器就不知道這是個什么玩意兒,并報錯——error:undefined:"***",也就是未定義的意思。
注意,你聲明的原型也是有作用域的——在一個函數(shù)中聲明的原型(我把它叫局部的原型聲明),不可以在另一個函數(shù)中使用,只能在本函數(shù)內(nèi)使用。
最好先加上原型聲明,然后再定義,或者是使用該函數(shù)。
原型聲明并不是可有可無的,很多時候它關(guān)系到代碼的生成,函數(shù)定義會根據(jù)原型聲明進(jìn)行參數(shù)類型檢查,決定參數(shù)壓棧方式,使用函數(shù)的地方會根據(jù)原型聲明來確定如何提取棧中的參數(shù)。
如果你省略原型聲明,編譯器就會根據(jù)一些規(guī)則,自己來猜,猜錯了你就倒霉了。尤其是在傳統(tǒng)C與標(biāo)準(zhǔn)C混用的時候,會讓你得到錯誤的結(jié)論,而你怎么檢查源程序都查不出原因來。
你是新手,以上這些話你可能不完全明白,按照C語言的標(biāo)準(zhǔn),你最好是把原型聲明寫上,它并不是個可有可無的東西。先寫原型聲明,再寫函數(shù)定義或調(diào)用,這是一個好習(xí)慣。
函數(shù)定義就是規(guī)定函數(shù)的格式與功能。
函數(shù)聲明就是在函數(shù)調(diào)用之前進(jìn)行的一種說明。
下面舉例說明兩者的語法格式:
#includestdio.h
int fun(int a, int b); // 函數(shù)的聲明
void main()
{
int x=1, y=2;
int c;
c = fun(x+y);
}
// 下面的fun函數(shù)就是函數(shù)的定義
int fun(int a, int b)
{
return a+b;
}
注:如果被調(diào)函數(shù)(上例中為fun函數(shù))寫在調(diào)用處之前,可以不聲明(本例是現(xiàn)在調(diào)用處 (c = fun(x+y);)之后)。