巨集函式看起來像函式,卻不會帶來函式呼叫的額外開銷,但是巨集函式也有其弊端,例如:
#define call_max_fun(a, b) fun((a) > (b) ? (a) : (b))
int a = 5, b=0;
call_max_fun(++a, b); //a自增2次
call_max_fun(++a, b+10); //a自增1次
同樣的呼叫,竟然會因為引數的不同,導致a的結果值不同。
所以盡量使用內聯函式來替代巨集,內聯函式由於其內鏈結的屬性,可以在標頭檔案中定義,並且被多個編譯單元引用。另外內聯函式也不會帶來函式呼叫的額外開銷。另外內聯函式是真正的函式,它遵守作用域和訪問規則。
template
inline void callmaxfun(const t& a, const t& b)
f( a > b ? a : b);
內聯函式(巨集定義的替代品)
內聯函式 內聯函式由inlline標明,例如inline double square double x 通常用它來代替函式原型。它的作用是,在編譯的時候,將呼叫函式部分替換成函式的 這樣就不用 編譯器記下當前位址,將引數存入堆疊,調到函式定義位址,拿出引數進行運算,將return值放入堆疊,返回記下...
內聯函式和巨集函式
黑色印記 內聯函式和普通函式相比可以加快程式執行的速度,因為不需要中斷呼叫及返回的過程。在編譯階段內聯函式可以直接被鑲嵌到目標 中。而巨集只是乙個簡單地替換。內聯函式的優勢在於做引數型別檢查,而巨集定義不會。我們知道內聯函式和巨集定義是犧牲記憶體空間換取執行效率的。因此,是否使用內聯函式就要根據實際...
內聯函式和巨集函式
內聯函式和普通函式的區別 普通函式呼叫時是生成呼叫指令跳轉 然後當 執行到呼叫位置時,跳轉到函式所在的 段中執行 而 內聯函式就是直接把函式編譯好的二進位制指令複製到函式的呼叫位置 優點 提高了程式的執行速度 沒跳轉沒返回當然速度快了 但這樣會導致可執行檔案增大 冗餘 也就是犧牲空間來換取時間 顯式...