內聯函式和巨集的區別

2021-08-25 14:11:06 字數 692 閱讀 6642

1、替換的時機

內聯函式是在編譯期間進行替換,就是將該函式在函式的呼叫點直接展開

巨集函式是在預處理階段替換

2、替換的成功率

內聯函式只是對編譯器的乙個建議,如果編譯器覺得該函式不適合成為內聯函式時,便會忽略前面的[ inline ]關鍵字,比如我們將遞迴函式寫成內聯函式,編譯器會忽略前面的[ inline ]關鍵字(不會再呼叫點展開),把它當做乙個普通的遞迴函式處理,

巨集一旦定義則在預處理階段一定會替換

3、生效版本

內聯函式是在release版本下才生效

巨集都可以

4、安全檢查

編譯器會對內聯函式的引數型別做安全檢查或自動型別轉換(同普通函式)

巨集定義只是進行簡單的替換,不會進行安全檢查

5、是否可以訪問類成員變數

內聯函式可以訪問類的成員變數

巨集定義不能

總結:

使用內聯函式的場景:

(1)乙個函式被不斷的重複呼叫

(2)函式只是簡單的幾行,而且函式內不包含for,while,switch語句。

內聯函式和巨集的區別

首先要說明的是內聯函式只在c 中有這個概念,在c語言中沒有。1.巨集的缺陷 為什麼要使用巨集呢?因為函式的呼叫必須要將程式執行的順序轉移到函式所存放在記憶體中的某個位址,將函式的程式內容執行完後,再返回到轉去執行該函式前的地方。這種轉移操作要求在轉去執行前儲存現場並且記憶執行的位址,轉回後要恢復現場...

巨集和內聯函式的區別

巨集和內聯函式的區別 總結 內聯函式是對巨集的優化 1 巨集 巨集常量例 deifne pi 3.14 優點 一改全改,調高 的復用性 提高效能 缺點 定義巨集出錯時,不容易定位錯誤,因為預處理階段進行了替換 展開 在c 中對巨集常量進行了優化 用const 修飾變數 同時const具有巨集常量的屬...

內聯函式和巨集的區別

先說巨集和函式的區別 1.巨集做的是簡單的字串替換 注意是字串的替換,不是其他型別引數的替換 而函式的引數的傳遞,引數是有資料型別的,可以是各種各樣的型別.2.巨集的引數替換是不經計算而直接處理的,而函式呼叫是將實參的值傳遞給形參,既然說是值,自然是計算得來的.3.巨集在編譯之前進行,即先用巨集體替...