函數(shù)原型作為聲明,作用是提示編譯器,作為標(biāo)識(shí)符的函數(shù)名,在聲明之后或外部編譯單元/庫文件存在定義,以抑制編譯器遇到這個(gè)標(biāo)識(shí)符時(shí)產(chǎn)生標(biāo)識(shí)符未定義的編譯錯(cuò)誤,同時(shí)標(biāo)明出這個(gè)函數(shù)的參數(shù)傳遞及出入棧順序等必要的進(jìn)出要素,函數(shù)的定義則始終以原型為基準(zhǔn)進(jìn)行實(shí)現(xiàn)。原型作為語法技術(shù)的提出,出發(fā)點(diǎn)就在于此,利用它可以方便地定義互相遞歸的函數(shù),以及引用外部庫文件的符號(hào)。
目前創(chuàng)新互聯(lián)建站已為上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、四平網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
函數(shù)原型申明就是在main函數(shù)前面需要申明一下,否則main函數(shù)調(diào)用這個(gè)函數(shù)時(shí)會(huì)找不到,原型申明可以不定義具體的函數(shù)體,然后可以把函數(shù)體的具體部分放在main函數(shù)后面再來單獨(dú)定義,這樣程序整體上更整潔,要不然自定義函數(shù)都在main函數(shù)的前面就定義了,那代碼一多還得找主函數(shù)。
函數(shù)原型能告訴編譯程序一個(gè)函數(shù)將接受什么樣的參數(shù),將返回什么樣的返回值,這樣編譯程序就能檢查對(duì)函數(shù)的調(diào)用是否正確,是否存在錯(cuò)誤的類型轉(zhuǎn)換。例如,現(xiàn)有以下函數(shù)原型;
int
some_func(int,char·,long);
編譯程序就會(huì)檢查所有對(duì)該函數(shù)的引用(包括該函數(shù)的定義)是否使用了三個(gè)參數(shù)并且返回一個(gè)int類型的值。如果編譯程序發(fā)現(xiàn)函數(shù)的調(diào)用或定義與函數(shù)原型不匹配,編譯程序就會(huì)報(bào)告出錯(cuò)或警告消息。例如,對(duì)上述函數(shù)原型來說,當(dāng)編譯程序檢查以下語句時(shí),就會(huì)報(bào)告出錯(cuò)或警告消息:
x
=
some_func(l);
/*
not
enough
arguments
passed
*/
x
=
somc_funcC*HELLOl",
1,
"DUDE:");
/*
wrong
type
of
arguments
used
*/
x
=
aome_funcd,
sir,
2879,
"T");
/*
too
many
arguments
passed
*/
下例中的函數(shù)調(diào)用同樣是不正確的,因?yàn)楹瘮?shù)some_func()的返回值不是一個(gè)long*類型的值。
lValue=some_func(1,str,2879);
/*some_rune()returns
anint,not
a
long*
*/
同樣,編譯程序還能檢查函數(shù)的定義(或函數(shù)體)是否與函數(shù)原型匹配。例如,當(dāng)編譯程序檢查以下函數(shù)定義時(shí),就會(huì)報(bào)告出錯(cuò)或警告消息:
int
some_func(char
*string,longlValue,int
iValue)
/*
wrong
order
Of
{
parameters
*/
......
}
總之,在源文件中說明函數(shù)原型提供了一種檢查函數(shù)是否被正確引用的機(jī)制。目前許多流行的編譯程序都會(huì)檢查被引用的函數(shù)的原型是否已在源文件中說明過,如果沒有,就會(huì)發(fā)出警告消息。
函數(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);)之后)。
新聞名稱:c語言對(duì)函數(shù)的原型說明 c語言中,函數(shù)可以用原型說明,也可用簡(jiǎn)單說明
分享地址:http://bm7419.com/article10/ddejido.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、云服務(wù)器、企業(yè)建站、App開發(fā)、網(wǎng)站設(shè)計(jì)、軟件開發(fā)
聲明:本網(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)