C/C++除了pointer外,function prototype和header file也是C/C++的一大特色。
為什麼要funtion prototype呢?基於一個很簡單的理由,『variable要宣告,所以function也要宣告』。宣告function讓compiler知道這是一個function,並不是打字打錯了,也讓compiler藉機檢查function的parameter和return type有沒有用錯。
為什麼要header file呢?由於function都需要宣告,將function prototype預先寫法在header file裡,要用時只要include header file即可,這就是header file的功用。不過header file也衍生出另外一個功能,剛好可以在header file中詳細註解每個function的功能,當成文件使用。
該不該有funtion prototype和header file呢?在C#和Java中,都已經取消了這兩種機制,老實說,function prototype的確可以由compiler代勞,只要compiler在compile前,預先蒐集所有的function,然後自行產生function prototype即可,這樣連header file也可省了,不過header file另外一個附屬功能:『註解文件』,雖然在Java有Javadoc,C#有XML Comment可另外產生文件檔,但我個人認為,還是沒有如header file好用,因為header file不用另外產生。
所以雖然C/C++的funtion prototype和header file比較不方便,但header file的註解文件功能卻相當方便,且既然function prototype和header file已成為C/C++的『文化』之一,也唯有習慣這種寫法了。