巨集定義和內聯函式,都可以減少函式的呼叫開銷,每次呼叫函式不必壓棧和開闢新的空間。使用巨集定義和內聯函式**的執行效率高。它們的區別是
(1)巨集定義是預編譯器載入,而內聯函式是由編譯器載入;
(2)巨集定義容易產生一些錯誤,
#define min(x) (x*x) min(1+3)得到的結果不是我們想要的16,而是1+3*1+3=7;解決這個問題的辦法是加上括號:
#define min(x) ((x)*(x))
加括號可以解決上面這個例子的問題,但有些問題還是不能解決,比如
#define min(x) ((x++)*(x++)) min(2)=(2++)*(3++)=6 不是我們想要的結果
而呼叫內聯函式,就更呼叫函式沒什麼區別,不會出現這些問題。
內聯函式和巨集定義
在c中,我們常用巨集定義來達到優化速度的目的,但由於巨集定義的種種缺陷 大家應該都吃過這種苦吧 在c 中引入了內聯函式。內聯函式實現了巨集的概念,任何在類內定義的函式會自動的成為內聯函式,但是也可以在類外用inline關鍵字來定義內聯函式。內聯的目的和巨集一樣是為了減少函式呼叫的開銷,但是通常我們會...
巨集定義和內聯函式
巨集定義和內聯函式,都可以減少函式的呼叫開銷,每次呼叫函式不必壓棧和開闢新的空間。使用巨集定義和內聯函式 的執行效率高。它們的區別是 1 巨集定義是預編譯器載入,而內聯函式是由編譯器載入 2 巨集定義容易產生一些錯誤,define min x x x min 1 3 得到的結果不是我們想要的16,而...
內聯函式和巨集定義
1 容易出錯,預處理器在拷貝巨集 時,常常會產生意想不到的邊際效用,容易產生二義性。在呼叫處進行展開,會出現運算子優先順序的問題 2 不可以除錯。然而內聯函式在debug版本裡面,它根本不是真正的內斂,在release中才會成為真正的內斂。3 在c 中,巨集 無法操作類的私有資料成員。原因是,預處理...