問題描述:C語言中函數調用與傳回時會有部分的額外開銷,如果在函數需要調用的次數非常多時,這些額外開銷就會産生積累效應。C89中避免函數額外開銷的唯一方式是使用帶參數的宏。而C99中則提供了更好的一種方式,即内聯函數inline。内聯表明編譯器将函數的每一次調用都用函數的機器指令來代替,但其隻是建議編譯器這樣做,并不強制,編譯器可以選擇忽略。
使用宏造成的缺陷:
宏定義
在形式上類似于一個函數,但在使用時,僅僅隻是做
簡單替換,是以它不能進行參數有效性的檢測,無法執行
編譯器
嚴格類型檢查,另外它的傳回值也不能被強制轉換為可轉換的合适的類型。
内聯函數的使用注意:聲明為内聯函數的函數但沒有extern時,該函數定義在該檔案中是内聯的,當被外部檔案調用時會認為錯誤。如需在其他地方使用該函數,需在另一個檔案中為其提供外部定義。
static inline double average(double a, double b)
{
}
然後再建立一個average.h檔案,
#ifndef _AVERAGE_H_
#define _AVERAGE_H_
inline double average(double a,double b)
{
}
#endif
内聯函數的限制: