巨集函式看起來是乙個函式呼叫,但實際上卻不是,編譯器遇到巨集函式,會進行替換,因此會產生一些難以發現的錯誤。
#define add(x,y) x+y
#define max(x,y) ((x)>(y)?(x):(y))
int add(int x,int y)
void test()
在c++中,預處理器不能訪問類的成員,也就是說,預處理巨集不能用作類的成員函式。為了保有巨集函式的效率,又增加安全性,還能像一般成員那樣可以在類中訪問,c++引入內聯函式。
內聯函式繼承了巨集函式的效率,沒有普通函式呼叫時的開銷,又可以像普通函式一樣,可以進行引數、返回值型別的安全檢查,同時,也能作為成員函式。
在c++中,在普通函式前加上inline關鍵字,使之成為內聯函式。但是,內涵函式的宣告和函式體必須放在一起。否則,即使用inline修飾,編譯器仍將其視作普通函式。
內聯函式:
inline int add(int x,int y)
內聯函式和巨集函式
黑色印記 內聯函式和普通函式相比可以加快程式執行的速度,因為不需要中斷呼叫及返回的過程。在編譯階段內聯函式可以直接被鑲嵌到目標 中。而巨集只是乙個簡單地替換。內聯函式的優勢在於做引數型別檢查,而巨集定義不會。我們知道內聯函式和巨集定義是犧牲記憶體空間換取執行效率的。因此,是否使用內聯函式就要根據實際...
內聯函式和巨集函式
內聯函式和普通函式的區別 普通函式呼叫時是生成呼叫指令跳轉 然後當 執行到呼叫位置時,跳轉到函式所在的 段中執行 而 內聯函式就是直接把函式編譯好的二進位制指令複製到函式的呼叫位置 優點 提高了程式的執行速度 沒跳轉沒返回當然速度快了 但這樣會導致可執行檔案增大 冗餘 也就是犧牲空間來換取時間 顯式...
巨集 函式和內聯函式
巨集和函式的區別 1.巨集做的是簡單的字串替換 注意是字串的替換,不是其他型別引數的替換 而函式的引數的傳遞,引數是有資料型別的,可以是各種各樣的型別.2.巨集的引數替換是不經計算而直接處理的,而函式呼叫是將實參的值傳遞給形參,既然說是值,自然是計算得來的.3.巨集在編譯之前進行,即先用巨集體替換巨...