2008年9月25日 星期四

macro與inline差異

C99標準新增了inline function的定義,標準說:「Making a function an inline function suggests that calls to the function be as fast as possible.」其中由suggest一詞就可以知道實際的運作要看compiler如何實作,也許真的會讓function的呼叫變快,也可能什麼事都沒發生。

而macro與inline的差異:

  • macro是由preprocessor處理,由inline則是compiler來負責
  • macro對於檢查傳入參數的型別,而inline則會檢查型別

假設定義平方的巨集如下:
#define SQUARE(x) x * x
若執行
SQUARE(3+2);
則答案並不會預期印出25,而是11,因為macro只是當純的文字替換,所以式子將會變成:
3 + 2 * 3 + 2

因此,正確安全的寫法如下:
#define SQUARE(x) ((x) * (x))
而inline的寫法就和一般的function寫法一樣:
inline int square(int x) {
return x * x;
}

0 意見: