從巨集定義到inline函式

2021-09-30 14:15:16 字數 789 閱讀 9669

(一) 巨集和普通函式

在ti提供的一些例程中,經常能看到像下面這種使用巨集的方式。

巨集經常用於簡單的計算,比如求兩個數的最大值或者最小值。

#define max(a, b)    ((a)>(b)?(a):(b))
《c和指標》一書指出這樣做的好處有兩個:「第一,用於呼叫和從函式返回的**很可能比實際執行這個小型計算工作的**更大(博文作者注:函式呼叫會帶來額外的開銷),所以使用巨集比使用函式在程式的規模和速度方面都更勝一籌;第二,也是更為重要的一點,函式的引數必須宣告為一種特定的型別,所以它只能在型別合適的表示式上使用,反之,上面這個巨集可以用於整形、長整型、單浮點型、雙浮點數以及其他任何可以用操作符比較大小的型別。」同時,該書還指出:「和使用函式相比,使用巨集的不利之處在於每次使用巨集時,乙份巨集定義**的拷貝都將插入到程式中,除非巨集非常短,否則使用巨集可能會大幅度增加程式的長度。」

巨集和函式的比較如下表所示(源自《c和指標》一書)。

(二) 從巨集定義到inline函式

《c++ primer》一書指出:上面使用巨集的方式很有吸引力,但是也很危險,因為它的機制和函式呼叫不同,只是簡單地提供引數的替換(博文作者注:並不對引數的型別進行檢查)。

inline函式(內聯函式)的引入正是為了解決上面使用巨集的方式所帶來的問題。

inline和巨集定義

inline關鍵字 但使用 keil4 arm編譯測試未過,驗證了巨集定義和內聯函式的區別,自己總結 巨集定義和內聯函式都不生成 段,程式執行也沒有引數壓棧開銷 內聯函式檢查呼叫引數的合法性,也可以進行引數型別轉換 一 inline 關鍵字用來定義乙個類的內聯函式,引入它的主要原因是用它替代c中表示...

inline函式和 define巨集定義簡單講解

在c語言,實際上inline的出現是為了填補巨集定義的缺點。巨集定義是在編譯器預編譯的時候把define定義的關鍵字進行替換。用巨集定義的好處是巨集定義在形式及使用上像乙個函式,但它使用預處理器實現,沒有了引數壓棧,生成等一系列的操作。因此,效率很高,這是它在c中被使用的乙個主要原因。1 inlin...

內聯函式inline與巨集定義深入解析

內聯函式的優越性 一 inline定義的類的內聯函式,函式的 被放入符號表中,在使用時直接進行替換 像巨集定義一樣展開 沒有了呼叫的開銷,效率很高。二 類的內斂函式是乙個真正的函式。三 使用內聯函式inline可以完全取代表示式形式的巨集定義。例子 複製 如下 class a void settes...