2010-09-25 114 views

回答

1

內聯函數以與函數相同的方式評估它的參數(或者至少您可以這樣想)。這可以防止發生典型的宏觀錯誤。另一方面,通過聲明函數是內聯的,你可以提示編譯器避免函數調用,只需將代碼中的指令插入代碼中(就像宏一樣)。

簡而言之,它比宏更安全,但僅僅是編譯器的一個提示。編譯器不會被迫避免函數調用(至少如果我正確地記得它)。

順便說,例如, 「典型的宏錯誤」 的:

#define SQUARE(a) (a*a) 

int x = 10; 
int square = SQUARE(++x); // this turns out to be 11 * 12, instead of 11 * 11 

內聯函數會進行11 * 11來代替。

+1

其實這裏的結果是未定義的。 – 2010-09-25 18:34:20