inline和define的特點和區別

2021-08-11 04:49:32 字數 665 閱讀 1703

一、內聯函式inline

函式呼叫時都會產生一些額外的開銷,主要是系統棧的保護、**的傳遞、系統棧的恢復以及引數傳遞等。對於那些函式體很小、執行時間很短但又頻繁使用的函式,定義為內聯函式提高函式呼叫的效率。內聯函式不是在呼叫時發生轉移,而是在編譯時將函式體嵌入到每個內聯函式呼叫處。這樣就省去了引數傳遞、系統棧的保護與恢復等的時間開銷。

語法形式:《型別識別符號》《被調函式名》(含型別說明的形參表)

注意:

1.內聯函式以目標**的增加為代價來換取時間的節省。

2.內聯函式在編譯時被替換。

3.內聯函式一般不能含有迴圈語句和switch語句。

4.內聯函式的定義必須出現在第一次被呼叫之前。

5.對內聯函式不能進行異常介面說明。

如果違背了上述注意點中的任意一項,編譯程式就會無視關鍵字inline的存在,像處理一般函式一樣處理,不生成擴充套件**。

二、#define

#define sqr(x) x*x

int main()

列印出的結果:++k+1*k+1=4+4+1=9

注意:

1.在巨集擴充套件時,只對巨集名做簡單的代換,不做任何計算,也不做任何語法檢查。

2.巨集由編譯預處理程式處理。

C中 define和inline的區別

c中巨集定義和內聯函式的區別是很容易讓人忽視的乙個地方,也是面試的時候經常被提起的乙個問題。前幾天寫 的時候由於對巨集定義乙個細節的忽視,導致程式執行總是出錯。現在把巨集定義可能出現的問題總結一下。出錯的 結構如下 cpp view plain copy if rlc dc bit msk data...

define與inline的區別

define成為 巨集 在c語言程式設計中非常重要,它在程式編譯時只是在預處理的過程中實施簡單的替換操作而已。由於在替換過程中可能出現的各種不安全性問題,在c 提倡採用const或者inline 內聯函式 的方式替代巨集。內聯函式和普通函式相比可以加快程式的執行速度,但它是以增加程式儲存空間維代價的...

define與inline的區別

一 內聯函式inline inline 內聯函式對編譯器提出建議,是否進行巨集替換,編譯器有權拒絕,既為提出申請,不一定會成功。函式呼叫時都會產生一些額外的開銷,主要是系統棧的保護 的傳遞 系統棧的恢復以及引數傳遞等。對於那些函式體很小 執行時間很短但又頻繁使用的函式,定義為內聯函式提高函式呼叫的效...