C++隨筆-函數原型存放在頭文件中

除了內聯函數,在頭文件中通常只存放函數原型,而具體函數定義在其他源文件中。

需要函數原型的原因

程序的聲明部分都是服務於編譯器的,函數原型也是如此。

函數原型描述了函數到編譯器的接口。他將函數的返回值類型(如果有的話)以及參數的類型和數量告訴了編譯器。

例如

double volume = cube(side);

首先,原型告訴編譯器,cube()有一個double參數。如果程序沒有提供這樣的參數,原型會讓編譯器捕獲這種錯誤。其次,在cube()函數完成計算後,將把返回值放置在指定的位置,可能是CPU寄存器,也可能是內存中,然後調用函數例如main()將從這個位置取得返回值。由於原型指出了cube()的類型爲double,因此編譯器知道應該檢索多少個字節以及如何解釋他們,如果沒有這些信息,編譯器則只能進行猜測。

其次,爲什麼不直接使用函數定義,因爲函數原型裏的內容函數定義中都有?除非將函數定義放在函數調用之前。若將函數定義放在函數調用之後,且不使用函數原型,採用文件搜索的方式,則效率十分低下。因爲在文件搜索的時候需要停止對調用函數的編譯。

頭文件中只存放函數原型,而函數定義在其他源文件中

採用函數原型存放於頭文件,函數定義存放於其他源文件時,各個文件進行單獨編譯,之後再通過鏈接程序將他們鏈接起來。

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