在主調函式中呼叫某函式之前應對該被調函式進行說明(宣告),這與使用變數之前要先進行變數說明是一樣的。在主調函式中對被調函式作說明的目的是使編譯系統知道被調函式返回值的型別,以便在主調函式中按此種型別對返回值作相應的處理。
其一般形式為:
型別說明符 被調函式名(型別 形參,型別 形參…);
或為:型別說明符 被調函式名(型別,型別…);
括號內給出了形參的型別和形參名,或只給出形參型別。這便於編譯系統進行檢錯,以防止可能出現的錯誤。
例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命令包含在原始檔前部。
參考:對函式的「定義」和「宣告」不是一回事。「定義」是指對函式功能的確立,包括指定函式名,函式值型別、形參型別、函式體等,它是乙個完整的、獨立的函式單 位。而「宣告」 的作用則是把函式的名字、函式型別以及形參型別、個數和順序通知編譯系統,以便在呼叫該函式時系統按此進行對照檢查(例如函式名是否正確,實參與形參的類 型和個數是否一致)。從程式中可以看到對函式的宣告與函式定義中的函式首部基本上是相同的。因此可以簡單地照寫已定義的函式的首部,再加乙個分號,就成為 了對函式的「宣告」。在函式宣告中也可以不寫形參名,而只寫形參的型別。 在c語言中,函式宣告稱為函式原型(function prototype)。使用函式原型是ansi c的乙個重要特點。它的作用主要是利用它在程式的編譯階段對呼叫函式的合法性進行全面檢查。
說明:<1> 以前的c版本的函式宣告方式不是採用函式原型,而只是宣告函式名和函式型別。
如:float add(); 不包括引數型別和引數個數。系統不檢查引數型別和引數個數。新版本也相容這種用法,但不提倡這種用法,因為它未進行全面的檢查。
<2> 實際上,如果在函式呼叫前,沒有對函式作宣告,則編譯系統會把第一次遇到的該函式形式(函式定義或函式呼叫)作為函式的宣告,並將函式型別預設為int 型。如乙個max函式,呼叫之前沒有進行函式宣告,編譯時首先遇到的函式形式是函式呼叫"max(a, b)",由於對原型的處理是不考慮引數名的,因此系統將max()加上int作為函式宣告,即int max(); 因此不少教材說,如果函式型別為整型,可以在函式呼叫前不必作函式宣告。但是使用這種方法時,系統無法對引數的型別做檢查。或呼叫函式時引數使用不當,在 編譯時也不會報錯。因此,為了程式清晰和安全,建議都加以宣告為好。
<3> 如果被呼叫函式的定義出現在主調函式之前,可以不必加以宣告。因為編譯系統已經先知道了已定義的函式型別,會根據函式首部提供的資訊對函式的調用作正確性檢查。
<4> 如果已在所有函式定義之前,在函式的外部已做了函式宣告,則在各個主呼叫函式中不必對所呼叫的函式再作宣告。
參考:
strcmp函式原型 C語言
編寫函式原型為 int strcmp char s1,char s2 的函式,該函式實現兩個字串的比較。strcmp函式是string compare 字串比較 的縮寫,用於比較兩個字串並根據比較結果返回整數。基本形式為strcmp str1,str2 若str1 str2,則返回零 若str1st...
C語言函式宣告以及函式原型
c語言 由上到下依次執行,原則上函式定義要出現在函式呼叫之前,否則就會報錯。但在實際開發中,經常會在函式定義之前使用它們,這個時候就需要提前宣告。函式宣告 declaration 就是告訴編譯器我要使用這個函式,你現在沒有找到它的定義不要緊,請不要報錯,稍後我會把定義補上。函式宣告的格式非常簡單,相...
C 函式原型
一,函式原型 函式原型 函式宣告 就是告訴編譯器這個函式是存在的,讓編譯器知道這個函式的相關資訊。函式原型不要求提供形參名,有型別列表就可以了。避免使用函式原型的方法是,在首次使用函式定義之前定義它,但這並不是總可行的。我們一般把函式宣告放在主函式的前面,因為min 函式是應用程式的入口。函式宣告是...