巨集和內聯函式的區別

2021-09-24 12:45:17 字數 780 閱讀 5356

巨集和內聯函式的區別

總結: 內聯函式是對巨集的優化

1 巨集

巨集常量例:#deifne pi 3.14

優點:一改全改,調高**的復用性

提高效能

缺點:定義巨集出錯時,不容易定位錯誤,因為預處理階段進行了替換(**展開)

在c++中對巨集常量進行了優化 : 用const 修飾變數 同時const具有巨集常量的屬性

int main() 

****巨集函式****

#define max(left,right) ((left)>(right))?(left):(right)

int main()

2 內聯函式

用關鍵字 inline 修飾的函式叫做內聯函式,內聯函式在編譯階段就會在呼叫內聯函式的地方自動展開,沒有函式壓棧的開銷,提公升了程式執行的效率

inline int add(int left, int right)

int main()

特點: inline 是一種以空間換時間的做法,省去了呼叫函式的開銷,所以當**很長時或者有遞迴和迴圈時,不適合作為內聯函式

inline 對於編譯器而言只是乙個建議,編譯器會審時度勢自動優化,當函式有迴圈或者遞迴時,編譯器就不認inline,自動忽略掉內聯函式

內聯函式和巨集的區別

首先要說明的是內聯函式只在c 中有這個概念,在c語言中沒有。1.巨集的缺陷 為什麼要使用巨集呢?因為函式的呼叫必須要將程式執行的順序轉移到函式所存放在記憶體中的某個位址,將函式的程式內容執行完後,再返回到轉去執行該函式前的地方。這種轉移操作要求在轉去執行前儲存現場並且記憶執行的位址,轉回後要恢復現場...

內聯函式和巨集的區別

1 替換的時機 內聯函式是在編譯期間進行替換,就是將該函式在函式的呼叫點直接展開 巨集函式是在預處理階段替換 2 替換的成功率 內聯函式只是對編譯器的乙個建議,如果編譯器覺得該函式不適合成為內聯函式時,便會忽略前面的 inline 關鍵字,比如我們將遞迴函式寫成內聯函式,編譯器會忽略前面的 inli...

內聯函式和巨集的區別

先說巨集和函式的區別 1.巨集做的是簡單的字串替換 注意是字串的替換,不是其他型別引數的替換 而函式的引數的傳遞,引數是有資料型別的,可以是各種各樣的型別.2.巨集的引數替換是不經計算而直接處理的,而函式呼叫是將實參的值傳遞給形參,既然說是值,自然是計算得來的.3.巨集在編譯之前進行,即先用巨集體替...