函數定義與聲明

對函數的定義聲明不是一回事。定義是指對函數功能的確立,包括指定函數名,函數值類型、形參類型、函數體等,它是一個完整的、獨立的函數單位。而聲明的作用則是把函數的名字、函數類型以及形參類型、個數和順序通知編譯系統,以便在調用該函數時系統按此進行對照檢查(例如函數名是否正確,實參與形參的類型和個數是否一致)。從程序中可以看到對函數的聲明與函數定義中的函數首部基本上是相同的。因此可以簡單地照寫已定義的函數的首部,再加一個分號,就成爲了對函數的聲明。在函數聲明中也可以不寫形參名,而只寫形參的類型。 C語言中,函數聲明稱爲函數原型(function prototype)。使用函數原型是ANSI C的一個重要特點。它的作用主要是利用它在程序的編譯階段對調用函數的合法性進行全面檢查。

說明:

<1>
以前的C版本的函數聲明方式不是採用函數原型,而只是聲明函數名和函數類型。
如:float add(); 不包括參數類型和參數個數。系統不檢查參數類型和參數個數。新版本也兼容這種用法,但不提倡這種用法,因爲它未進行全面的檢查。

<2>
實際上,如果在函數調用前,沒有對函數作聲明,則編譯系統會把第一次遇到的該函數形式(函數定義或函數調用)作爲函數的聲明,並將函數類型默認爲int 型。如一個max函數,調用之前沒有進行函數聲明,編譯時首先遇到的函數形式是函數調用"max(a, b)",由於對原型的處理是不考慮參數名的,因此係統將max()加上int作爲函數聲明,即int max(); 因此不少教材說,如果函數類型爲整型,可以在函數調用前不必作函數聲明。但是使用這種方法時,系統無法對參數的類型做檢查。或調用函數時參數使用不當,在編譯時也不會報錯。因此,爲了程序清晰和安全,建議都加以聲明爲好。

<3>
如果被調用函數的定義出現在主調函數之前,可以不必加以聲明。因爲編譯系統已經先知道了已定義的函數類型,會根據函數首部提供的信息對函數的調用作正確性檢查。

<4>
如果已在所有函數定義之前,在函數的外部已做了函數聲明,則在各個主調用函數中不必對所調用的函數再作聲明。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章