星期一, 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

沒有留言: