巨集和函式和內聯函式

2021-10-01 01:34:31 字數 569 閱讀 1886

巨集和函式的區別:

巨集做的是簡單的字串替換(注意是字串的替換,不是其他型別引數的替換),而函式的引數的傳遞,引數是有資料型別的,可以是各種各樣的型別.

巨集的引數替換是不經計算而直接處理的,而函式呼叫是將實參的值傳遞給形參,既然說是值,自然是計算得來的.

巨集在編譯之前進行,即先用巨集體替換巨集名,然後再編譯的,而函式顯然是編譯之後,在執行時,才呼叫的.因此,巨集占用的是編譯的時間,而函式占用的是執行時的時間.

巨集的引數是不佔記憶體空間的,因為只是做字串的替換,而函式呼叫時的引數傳遞則是具體變數之間的資訊傳遞,形參作為函式的區域性變數,顯然是占用記憶體的.

函式的呼叫是需要付出一定的時空開銷的,因為系統在呼叫函式時,要保留現場,然後轉入被呼叫函式去執行,呼叫完,再返回主調函式,此時再恢復現場,這些操作,顯然在巨集中是沒有的.

內聯函式與巨集的區別:

1.內聯函式在執行時可除錯,而巨集定義不可以;

2.編譯器會對內聯函式的引數型別做安全檢查或自動型別轉換(同普通函式),而巨集定義則不會;

3.內聯函式可以訪問類的成員變數,巨集定義則不能;

4.在類中宣告同時定義的成員函式,自動轉化為內聯函式。

內聯函式和巨集函式

黑色印記 內聯函式和普通函式相比可以加快程式執行的速度,因為不需要中斷呼叫及返回的過程。在編譯階段內聯函式可以直接被鑲嵌到目標 中。而巨集只是乙個簡單地替換。內聯函式的優勢在於做引數型別檢查,而巨集定義不會。我們知道內聯函式和巨集定義是犧牲記憶體空間換取執行效率的。因此,是否使用內聯函式就要根據實際...

內聯函式和巨集函式

內聯函式和普通函式的區別 普通函式呼叫時是生成呼叫指令跳轉 然後當 執行到呼叫位置時,跳轉到函式所在的 段中執行 而 內聯函式就是直接把函式編譯好的二進位制指令複製到函式的呼叫位置 優點 提高了程式的執行速度 沒跳轉沒返回當然速度快了 但這樣會導致可執行檔案增大 冗餘 也就是犧牲空間來換取時間 顯式...

巨集 函式和內聯函式

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