C語言 - 第二十六章 | 函式入門 - 行內函式
行內函式
內聯函式是一種編譯最佳化的方式。
對於一些內容較為簡短又常使用的函式,編譯器在程式設計師的建議(使用關鍵字inline)下,可以將指定的函式插入並取代每一處呼叫該函式的地方,從而減少呼叫函式耗費的時間。
1 | // power() 函式 |
在呼叫函式時會需要分配記憶空間因而需要額外的資源負擔,像power()這樣的小函式,可以「建議」編譯器將之設定為行內函式(Inline function),如果建議被採納,則該函式會自動在呼叫點展現為程式碼,行內函式建議可以直接定義於標頭檔案中。
1 | // math.h |
配合標頭檔案
1 | // math.c |
使用gcc,在math.c中,power()可能在註解的地方被展開編譯,不過,在math.c以外的其他程式中若撰寫了power(),只會被當成一般函式呼叫,並不會有inline的效果。
主函式不變
1 |
|
inline只能建議編譯器,也就是說建議並不一定會被採納,這視編譯器而定,像是使用到goto、static變數、迴圈、switch等,編譯器可能不接受inline的建議,遞迴函式也無法在呼叫點展開,一個數千行的函式也不適合在呼叫點展開,如果編譯器拒絕將函式展開,它會將該函式視為一般函式進行編譯,inline的建議會被忽略。
C99的inline規則,與GNU的inline規則有所不同,詳情可參考(Inline Functions In C)[http://www.greenend.org.uk/rjk/tech/inline.html]。
註:以上參考了
引數傳遞、傳回值
C的內聯函式(inline function)
我有所不知的 static inline function
