天天看點

[inline]C99中inline的使用

問題描述: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      

内聯函數的限制: