函數(shù)原型申明就是在main函數(shù)前面需要申明一下,否則main函數(shù)調用這個函數(shù)時會找不到,原型申明可以不定義具體的函數(shù)體,然后可以把函數(shù)體的具體部分放在main函數(shù)后面再來單獨定義,這樣程序整體上更整潔,要不然自定義函數(shù)都在main函數(shù)的前面就定義了,那代碼一多還得找主函數(shù)。
網(wǎng)站建設哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、小程序設計、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了新華免費建站歡迎大家使用!
函數(shù)原型作為聲明,作用是提示編譯器,作為標識符的函數(shù)名,在聲明之后或外部編譯單元/庫文件存在定義,以抑制編譯器遇到這個標識符時產(chǎn)生標識符未定義的編譯錯誤,同時標明出這個函數(shù)的參數(shù)傳遞及出入棧順序等必要的進出要素,函數(shù)的定義則始終以原型為基準進行實現(xiàn)。原型作為語法技術的提出,出發(fā)點就在于此,利用它可以方便地定義互相遞歸的函數(shù),以及引用外部庫文件的符號。
函數(shù)原型能告訴編譯程序一個函數(shù)將接受什么樣的參數(shù),將返回什么樣的返回值,這樣編譯程序就能檢查對函數(shù)的調用是否正確,是否存在錯誤的類型轉換。例如,現(xiàn)有以下函數(shù)原型;
int
some_func(int,char·,long);
編譯程序就會檢查所有對該函數(shù)的引用(包括該函數(shù)的定義)是否使用了三個參數(shù)并且返回一個int類型的值。如果編譯程序發(fā)現(xiàn)函數(shù)的調用或定義與函數(shù)原型不匹配,編譯程序就會報告出錯或警告消息。例如,對上述函數(shù)原型來說,當編譯程序檢查以下語句時,就會報告出錯或警告消息:
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ù)調用同樣是不正確的,因為函數(shù)some_func()的返回值不是一個long*類型的值。
lValue=some_func(1,str,2879);
/*some_rune()returns
anint,not
a
long*
*/
同樣,編譯程序還能檢查函數(shù)的定義(或函數(shù)體)是否與函數(shù)原型匹配。例如,當編譯程序檢查以下函數(shù)定義時,就會報告出錯或警告消息:
int
some_func(char
*string,longlValue,int
iValue)
/*
wrong
order
Of
{
parameters
*/
......
}
總之,在源文件中說明函數(shù)原型提供了一種檢查函數(shù)是否被正確引用的機制。目前許多流行的編譯程序都會檢查被引用的函數(shù)的原型是否已在源文件中說明過,如果沒有,就會發(fā)出警告消息。