一、內聯函式inline
inline:內聯函式對編譯器提出建議,是否進行巨集替換,編譯器有權拒絕,既為提出申請,不一定會成功。
函式呼叫時都會產生一些額外的開銷,主要是系統棧的保護、**的傳遞、系統棧的恢復以及引數傳遞等。對於那些函式體很小、執行時間很短但又頻繁使用的函式,定義為內聯函式提高函式呼叫的效率。內聯函式不是在呼叫時發生轉移,而是
在編譯時將函式體嵌入到每個內聯函式呼叫處
。這樣就省去了引數傳遞、系統棧的保護與恢復等的時間開銷。
語法形式:《型別識別符號》《被調函式名》(含型別說明的形參表)
注意:
1.內聯函式以目標**的增加為代價來換取時間的節省。
2.內聯函式在編譯時被替換。
3.內聯函式一般不能含有迴圈語句和switch語句。
4.內聯函式的定義必須出現在第一次被呼叫之前。
5.對內聯函式不能進行異常介面說明。
如果違背了上述注意點中的任意一項,編譯程式就會無視關鍵字inline的存在,像處理一般函式一樣處理,不生成擴充套件**。
二、#define
#define:
定義預編譯時處理的巨集
;
只進行簡單的字元替換,無型別檢測
不帶引數的巨集定義格式:#define 識別符號 字元或字串
例:#define pi 3.1415926
帶引數的巨集定義格式:#define 巨集名(參數列) 使用引數的字元或字串
#define sqr(x) x*x
int main()
注意:
1.在巨集擴充套件時,只對巨集名做簡單的代換,不做任何計算,也不做任何語法檢查。
2.巨集由編譯預處理程式處理。
3.巨集定義可出現在程式的任何位置。
4.在巨集定義中可以使用已定義的巨集名。
5.巨集由編譯預處理程式處理,而函式由編譯程式處理。
define與inline的區別
define成為 巨集 在c語言程式設計中非常重要,它在程式編譯時只是在預處理的過程中實施簡單的替換操作而已。由於在替換過程中可能出現的各種不安全性問題,在c 提倡採用const或者inline 內聯函式 的方式替代巨集。內聯函式和普通函式相比可以加快程式的執行速度,但它是以增加程式儲存空間維代價的...
define巨集定義與inline內聯的異同
二 define巨集定義與inline內聯 1 內聯函式在可讀性方面與函式是相同的,而在編譯時是將函式直接嵌入呼叫程式的主體,省去了呼叫 返回指令,這樣在執行時速度更快。2 內聯函式可以除錯,而巨集定義是不可以除錯的。內聯函式與巨集本質上是兩個不同的概念如果程式編寫者對於既要求快速,又要求可讀的情況...
C中 define和inline的區別
c中巨集定義和內聯函式的區別是很容易讓人忽視的乙個地方,也是面試的時候經常被提起的乙個問題。前幾天寫 的時候由於對巨集定義乙個細節的忽視,導致程式執行總是出錯。現在把巨集定義可能出現的問題總結一下。出錯的 結構如下 cpp view plain copy if rlc dc bit msk data...