c 中define與inline的一些注意事項

2021-06-19 20:16:32 字數 658 閱讀 3876

巨集不會被編譯,因為在原始碼進入編譯器之前,他會被預處理器去掉,因此盡量用const代替。

巨集不是函式,只是在編譯前預處理階段將程式中有關字串替換成巨集體。因此要注意下列**中的問題:

int a = 5, b = 0;

max(++a, b);// a 的值增加了2次

max(++a, b+10); // a 的值只增加了1次

相比之下內聯函式實現了巨集的效率,但在編譯中不單獨產生**,而是將有關**嵌入到呼叫處。

inline max(int a,int b)

inline定義的內聯函式,函式**被放入符號表中,在使用時進行替換(像巨集一樣展開),效率很高。類的內聯函式也是函式。編繹器在呼叫乙個內聯函式,首先會檢查引數問題,保證呼叫正確,像對待真正函式一樣,消除了隱患及侷限性。inline可以作為類的成員函式,可以使用所在類的保護成員及私有成員。

內聯函式和普通函式相比可以加快程式的執行速度,但它是以增加程式儲存空間為代價的,由於不需要中斷呼叫,在編譯內聯函式的時候內聯函式可以直接被嵌入目標**中。

內斂函式的缺點:

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