1. 程式人生 > >行內函數和巨集

行內函數和巨集

巨集定義和行內函數的區別 1. 巨集定義不是函式,但是使用起來像函式。前處理器用複製巨集程式碼的方式代替函式的呼叫,省去了函式壓棧退棧過程,提高了效率。

    行內函數本質上是一個函式,行內函數一般用於函式體的程式碼比較簡單的函式,不能包含複雜的控制語句,while、switch,並且行內函數本身不能直接呼叫自身。如果行內函數的函式體過大,編譯器會自動的把這個行內函數變成普通函式。

2. 巨集定義是在預編譯的時候把所有的巨集名用巨集體來替換,簡單的說就是字串替換

    行內函數則是在編譯的時候進行程式碼插入,編譯器會在每處呼叫行內函數的地方直接把行內函數的內容展開,這樣可以省去函式的呼叫的開銷,提高效率

3. 巨集定義是沒有型別檢查的,無論對還是錯都是直接替換

    行內函數在編譯的時候會進行型別的檢查,行內函數滿足函式的性質,比如有返回值、引數列表等

4. 巨集定義和行內函數使用的時候都是進行程式碼展開。

不同的是巨集定義是在預編譯的時候把所有的巨集名替換,行內函數則是在編譯階段把所有呼叫行內函數的地方把行內函數插入。這樣可以省去函式壓棧退棧,提高了效率