C语言函数原型
在主調函數中調用某函數之前應對該被調函數進行說明(聲明),這與使用變量之前要先進行變量說明是一樣的。在主調函數中對被調函數作說明的目的是使編譯系統知道被調函數返回值的類型,以便在主調函數中按此種類型對返回值作相應的處理。
其一般形式為:
????????類型說明符?被調函數名(類型?形參,類型?形參…);??
或為:
????????類型說明符?被調函數名(類型,類型…);??
括號內給出了形參的類型和形參名,或只給出形參類型。這便于編譯系統進行檢錯,以防止可能出現的錯誤。
例8.1?main函數中對max函數的說明為:
int?max(int?a,int?b);
或寫為:
????????int?max(int,int);
C語言中又規定在以下幾種情況時可以省去主調函數中對被調函數的函數說明。
1)?如果被調函數的返回值是整型或字符型時,可以不對被調函數作說明,而直接調用。這時系統將自動對被調函數返回值按整型處理。例8.2的主函數中未對函數s作說明而直接調用即屬此種情形。
2)?當被調函數的函數定義出現在主調函數之前時,在主調函數中也可以不對被調函數再作說明而直接調用。例如例8.1中,函數max的定義放在main?函數之前,因此可在main函數中省去對max函數的函數說明int?max(int?a,int?b)。
3)?如在所有函數定義之前,在函數外預先說明了各個函數的類型,則在以后的各主調函數中,可不再對被調函數作說明。例如:
????char?str(int?a);
????float?f(float?b);
????main()
????{
?????……
????}
????char?str(int?a)
????{
?????……
????}
????float?f(float?b)
????{
?????……
????}
其中第一,二行對str函數和f函數預先作了說明。因此在以后各函數中無須對str和f函數再作說明就可直接調用。
4)?對庫函數的調用不需要再作說明,但必須把該函數的頭文件用include命令包含在源文件前部。
參考:http://www.winyes.com/Develop/Program/CYY/CyyCourse/8_6.html
對函數的“定義”和“聲明”不是一回事。“定義”是指對函數功能的確立,包括指定函數名,函數值類型、形參類型、函數體等,它是一個完整的、獨立的函數單 位。而“聲明” 的作用則是把函數的名字、函數類型以及形參類型、個數和順序通知編譯系統,以便在調用該函數時系統按此進行對照檢查(例如函數名是否正確,實參與形參的類 型和個數是否一致)。從程序中可以看到對函數的聲明與函數定義中的函數首部基本上是相同的。因此可以簡單地照寫已定義的函數的首部,再加一個分號,就成為 了對函數的“聲明”。在函數聲明中也可以不寫形參名,而只寫形參的類型。 在C語言中,函數聲明稱為函數原型(function prototype)。使用函數原型是ANSI C的一個重要特點。它的作用主要是利用它在程序的編譯階段對調用函數的合法性進行全面檢查。
說明:
<1> 以前的C版本的函數聲明方式不是采用函數原型,而只是聲明函數名和函數類型。
如:float add(); 不包括參數類型和參數個數。系統不檢查參數類型和參數個數。新版本也兼容這種用法,但不提倡這種用法,因為它未進行全面的檢查。
<2> 實際上,如果在函數調用前,沒有對函數作聲明,則編譯系統會把第一次遇到的該函數形式(函數定義或函數調用)作為函數的聲明,并將函數類型默認為int 型。如一個max函數,調用之前沒有進行函數聲明,編譯時首先遇到的函數形式是函數調用"max(a, b)",由于對原型的處理是不考慮參數名的,因此系統將max()加上int作為函數聲明,即int max(); 因此不少教材說,如果函數類型為整型,可以在函數調用前不必作函數聲明。但是使用這種方法時,系統無法對參數的類型做檢查。或調用函數時參數使用不當,在 編譯時也不會報錯。因此,為了程序清晰和安全,建議都加以聲明為好。
<3> 如果被調用函數的定義出現在主調函數之前,可以不必加以聲明。因為編譯系統已經先知道了已定義的函數類型,會根據函數首部提供的信息對函數的調用作正確性檢查。
<4> 如果已在所有函數定義之前,在函數的外部已做了函數聲明,則在各個主調用函數中不必對所調用的函數再作聲明。
參考:http://sdzhguoliang.blog.163.com/blog/static/9982057201062652022596/
http://www.cnblogs.com/pmer/archive/2011/09/04/2166579.html
轉載于:https://www.cnblogs.com/cc-Cheng/p/3314992.html
總結
- 上一篇: 渴望尽快能找到工作,开始上班
- 下一篇: 华为2013校园招聘上机笔试题