內聯函式和巨集定義

2021-08-27 19:23:51 字數 664 閱讀 9551

**<>

先說巨集和函式的區別:

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

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

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

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

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

現在來看內聯函式:

所 謂"內聯函式"就是將很簡單的函式"內嵌"到呼叫他的程式**中,隻樣做的目的是為了避免上面說到的第5點,目的旨在節約下原本函式呼叫時的時空開銷.但 必須注意的是:作為內聯函式,函式體必須十分簡單,不能含有迴圈、條件、選擇等複雜的結構,否則就不能做為內聯函式了。事實上,即便你沒有指定函式為內聯 函式,有的編譯系統也會自動將很簡單的函式作為內聯函式處理;而對於複雜的函式,即便你指定他為內聯函式,系統也不會理會的。

內聯函式和巨集定義

在c中,我們常用巨集定義來達到優化速度的目的,但由於巨集定義的種種缺陷 大家應該都吃過這種苦吧 在c 中引入了內聯函式。內聯函式實現了巨集的概念,任何在類內定義的函式會自動的成為內聯函式,但是也可以在類外用inline關鍵字來定義內聯函式。內聯的目的和巨集一樣是為了減少函式呼叫的開銷,但是通常我們會...

巨集定義和內聯函式

巨集定義和內聯函式,都可以減少函式的呼叫開銷,每次呼叫函式不必壓棧和開闢新的空間。使用巨集定義和內聯函式 的執行效率高。它們的區別是 1 巨集定義是預編譯器載入,而內聯函式是由編譯器載入 2 巨集定義容易產生一些錯誤,define min x x x min 1 3 得到的結果不是我們想要的16,而...

內聯函式和巨集定義

1 容易出錯,預處理器在拷貝巨集 時,常常會產生意想不到的邊際效用,容易產生二義性。在呼叫處進行展開,會出現運算子優先順序的問題 2 不可以除錯。然而內聯函式在debug版本裡面,它根本不是真正的內斂,在release中才會成為真正的內斂。3 在c 中,巨集 無法操作類的私有資料成員。原因是,預處理...