內聯與巨集定義

2022-08-05 11:06:15 字數 673 閱讀 2739

**:

巨集定義可以提高效率,但是巨集不是函式。預編譯通過**複製的方式代替函式呼叫,省去了諸如函式壓棧等系統過程,從而提高了效率。但是由於巨集定義僅僅是**替換,所以引起很多問題。

#define  max(a,b)  (a) > (b) ? ( a) : (b)

result=max(a,b) +2  編譯器對其解釋為 (a) > (b) ? (a) : (b)+2 .導致該語句執行與預期不符。

巨集定義的另乙個缺點就是無法訪問類的私有成員

而內聯函式通過把**直接複製進呼叫函式體內,避免產生某些系統過程,同樣提高了效率,但是內聯函式可以進行型別檢查,this指標同樣能應用,這是巨集定義無法比擬的。

內聯函式必須是函式的宣告和定義一體,且在函式前面加inline。

1、內聯函式在可讀性方面與函式是相同的,而在編譯時是將函式直接嵌入呼叫程式的主體,省去了呼叫/返回指令,這樣在執行時速度更快。

2、內聯函式可以除錯,而巨集定義是不可以除錯的。

內聯函式與巨集本質上是兩個不同的概念如果程式編寫者對於既要求快速,又要求可讀的情況下,則應該將函式冠以inline。下面詳細介紹一下**一下內聯函式與巨集定義。

內聯函式與巨集定義

用內聯取代巨集 1.內聯可除錯 2.可進行型別安全檢查或自動型別轉換 3.可訪問成員變數。另外,定義在類宣告中的成員函式自動轉化為內聯函式。內聯函式與巨集定義 在c中,常用預處理語句 define來代替乙個函式定義。例如 define max a,b a b a b 該語句使得程式中每個出現max ...

內聯函式與巨集定義

1 內聯函式取消了引數的壓棧,減少呼叫的開銷 2 內聯函式宣告必須和定義一起,如果只有宣告,編譯器只會將它看做普通函式的宣告,如果宣告的時候使用inline,定義在其他地方也用inline,那麼它是內聯還是普通函式 普通函式。查彙編 內聯函式與普通函式一樣?3 c 類中定義的函式都預設是內聯函式,無...

巨集定義與內聯函式

1 巨集定義的規則和使用解析 1 巨集定義的解析規則就是 在預處理階段由預處理器進行替換,這個替換是原封不動的替換。2 巨集定義替換會遞迴進行,直到替換出來的值本身不再是乙個巨集為止。3 乙個正確的巨集定義式子本身分為3部分 第一部分是 dedine 第二部分是巨集名 剩下的所有為第三部分。4 巨集...