星期一, 3月 06, 2017
[ C ] macro 和 inline
inline function是建議compiler將呼叫function的地方換成function本體,
ex:
inline int square(int i)
{
return i*i;
}
void main()
{
square(4); // 4*4
}
就會被替換成4*4,
這樣替換的功用其實和macro有點相似,
差異在於:
macro => 前置處理器(preprocessor)在處理
inline => 編譯器(compiler)在處理
而在使用macro時要小心,因為他只是文字上的替換,
因為他不會去檢查參數類別和語句的檢查,
所以可能造成運算子的順序錯亂。
#define SQUARE(x) x * x
SQUARE(3+2); // 3+2*3+2
而為什麼要使用inline?
一般在使用function時,會跑去function所在的記憶體去執行,
執行完後再跑回來,需要耗費時間。
而inline的方式是把function copy到呼叫的地方,
一種空間換取時間的概念。
macro是在編譯前,preprocessor就會把要種換的地方都換掉。
只要宣告inline就可以直接使用??
function內容要少,而且不能有loop才有可能可以。
Compiler時需要加上-O2或-O3,
參考Ref.
Ref
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言