內聯函式與巨集的關係

2021-10-09 11:58:09 字數 693 閱讀 8535

在c中,我們經常將一些短而執行頻繁的函式寫成巨集的形式,這會減小函式呼叫的開銷,從而提高效率,但這經常會出現一些難以發現或者無法解決的問題。在c++中使用巨集定義會出現乙個問題,預處理器不允許訪問類的成員,即預處理巨集不能作為類成員的函式。為了解決這一問題,從而引入了內聯函式,使得能夠在類中訪問自如。 1°簡單問題如下:

#include

#define add(a,b) a+b

intmain

(void

)

2°難題如下:

#include

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

intmain

(void

)

內聯函式解決如下:

#include

inline

intmax

(int a,

int b)

intmain

(void

)

巨集是在預處理階段進行處理,內聯函式是在編譯階段進行處理。內聯函式和巨集一樣,並不會有呼叫函式,壓棧和出棧等操作,可以提高效率,可以說是空間換取時間的方法。值得注意的是並不是所有的函式都能定義為內聯函式,內聯函式中不應有迴圈和過多的判斷,函式體也不能太大。內聯只是建議編譯器將此函式當作內聯函式,具體有沒有當作那是編譯器的事情了。

巨集與內聯函式

函式作為一種抽象機制,對解決大型複雜問題起到了很大作用。但是,由於函式呼叫時需要開銷的,例如,函式呼叫時需要保護呼叫者的執行環境,進行引數傳遞,執行呼叫命令,為區域性變數分配空間以及執行返回指令等,因此函式會帶來程式執行效率的下降,特別是對一些小函式的頻繁呼叫。c 提供了兩種解決上述問題的辦法 巨集...

巨集與內聯函式

建議 1 使用const定義常量而不是 define 2 使用inline內聯函式而不是 define來定義小型函式 第一部分 巨集 為什麼要使用巨集呢?因為函式的呼叫 必須要將程式執行的順序轉移到函式所存放在記憶體中的某個位址,將函式的程式內容執行完後,再返回到轉去執行該函式前的地方。這種轉移操作...

巨集與內聯函式

第一部分 巨集 為什麼要使用巨集呢?因為函式的呼叫必須要將程式執行的順序轉移到函式所存放在記憶體中的某個位址,將函式的程式內容執行完後,再返回到轉去執行該函式前的地方。這種轉移操作要求在轉去執行前要儲存現場並記憶執行的位址,轉回後要恢復現場,並按原來儲存位址繼續執行。因此,函式呼叫要有一定的時間和空...