因為函式呼叫需要開銷(如:保護呼叫者的執行環境、引數傳遞、執行呼叫指令等),所以函式呼叫會帶來程式執行效率的下降,特別是對一些小函式的頻繁呼叫將是程式的效率有很大的降低。
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 提供了兩種解決上述問題的辦法 巨集...