c 巨集替換與內聯函式的區別

2021-09-29 14:32:07 字數 635 閱讀 4553

#includeusing namespace std;

#define myfunc(a, b) ((a) < (b) ? (a) : (b))

inline int myfunc(int a, int b)

int main()

內聯函式執行結果

巨集替換執行結果

通過了解內聯函式的內部機制後,很自然會想到同樣是**的替換,那麼內聯函式的替換與巨集替換的區別是什麼?

上面**形象展示了內聯函式替換與巨集替換的區別,他們替換在不同的階段,

巨集替換在預編譯階段, 而內聯函式作用在編譯執行階段。

通過實驗結果發現:

1.內聯函式其實就是正常的函式呼叫的結果。

2. 但是巨集替換只是將**片段機械的進行巨集展開。即簡單的進行**文字的替換。

int c = myfunc(++a, b) 機械的替換為:   ((++a)

內聯函式與巨集替換的區別

1 內聯函式在執行時可除錯,而巨集不可以 2 內聯函式可以訪問類的成員變數,而巨集不可以 3 在類中宣告同時定義的簡單的函式,會自動轉換為內聯函式 4 編譯器會對內聯函式的引數型別做安全檢查 內聯函式具有巨集的替換效果,以及普通函式的安全檢查 define max a,b a b a b 一定要帶括...

內聯函式 巨集替換

傳智掃地僧課程學習筆記。inline int myfunc int a,int b 內聯函式的實現和宣告必須在一起!你可以簡單的理解為,內聯函式和巨集替換類似,也因此沒有真正函式的壓棧,出棧,適合短小的函式,內聯是一種請求,編譯器不一定就這麼處理,內聯的限制 不能有迴圈語句,不能有過多的條件判斷,下...

巨集與內聯函式的區別

總結目的 本人曾經一度選擇放棄開發崗位,然後僅僅三個月之後又覺得自己的選擇是錯誤的,還是應該繼續自己比較擅長的開發,然而一次面試卻讓我發現,很小的知識點已經遺忘。1 巨集只做簡單的字串替換,函式是引數傳遞,所以必然有引數型別檢查 支援各種型別,而不是只有字串 2 巨集不經計算而直接替換引數,函式呼叫...