C 巨集與內聯函式

2021-07-30 08:07:47 字數 1016 閱讀 3520

因為函式呼叫需要開銷(如:保護呼叫者的執行環境、引數傳遞、執行呼叫指令等),所以函式呼叫會帶來程式執行效率的下降,特別是對一些小函式的頻繁呼叫將是程式的效率有很大的降低。

c++提出了兩種解決方法:巨集、內聯函式。

1. 巨集

巨集是c++編譯預處理系統處理的實體。

巨集定義的4種格式:

1)#define 《巨集名》 《文字串》

在編譯前進行使用文字串進行巨集替換

#define pi 3.14

2)#define 《巨集名》(《參數列》) 《文字串》

在編譯前進行使用文字串進行巨集替換

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

3)#define 《巨集名》

只是告訴編譯程式該巨集名已經被定義,不做任何文字串替換,其用於條件編譯

如:#define outputfile

#ifdef outputfile

//輸出到檔案的**

#endif

4)#undef 《巨集名》

用於取消巨集名的編譯

不足:1)重複計算,如max((x+1),(y+2)),因為其只是進行單純的文字替換

2)不進行引數型別檢查和轉換

3)不利於一些工具對程式的處理(如c++程式編譯後,所有巨集都不存在了)

2. 內聯函式

在函式定義中的返回值型別之前加上乙個關鍵字inline

其作用是建議(具體有沒有不一定,有些函式加上也不會作為內聯函式對待,如遞迴函式)編譯程式把該函式的函式體展開到呼叫點,這樣就避免了函式呼叫的開銷,從而提高了函式呼叫的效率。

inline int max(int a,int b)

注意內聯函式名具有檔案作用域。

C 中內聯函式與巨集

c 內聯函式 inline 介紹 介紹內聯函式之前,有必要介紹一下預處理巨集。內聯函式的功能和預處理巨集的功能相似。相信大家都用過預處理巨集,我們會經常定義一些巨集,如 define table comp x x 0?x 0 define table comp x x 0?x 0 就定義了乙個巨集。...

C 內聯函式與巨集定義

用內聯取代巨集 1.內聯可除錯 2.可進行型別安全檢查或自動型別轉換 3.可訪問成員變數。另外,定義在類宣告中的成員函式自動轉化為內聯函式。文章 一 內聯函式與巨集定義 在c中,常用預處理語句 define來代替乙個函式定義。例如 define max a,b a b a b 該語句使得程式中每個出...

巨集與內聯函式

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