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