產生原因
c 語言中有巨集函式的概念。巨集函式的特點是內嵌到呼叫**中去,避免了函式呼叫的開銷。但是由於巨集函式的處理發生在預處理階段,缺失了語法檢測和有可能帶來的語意差
錯。優缺點
巨集函式普通函式
優點內嵌**,闢免壓棧與出棧的開銷。
高度抽象,避免重複開發,型別檢查
缺點**替換,易使生成**體積變大,
易產生邏輯錯誤, 無型別檢查
壓棧與出棧,帶來開銷
**示例
#include
/** * 巨集函式和普通函式
*/using
namespace std;
// 定義巨集函式
#define sqr(x) ((x)*(x))
// 定義sqr函式
intsqr
(int x)
intmain()
return0;
}
程式執行結果
在c++中const常量可以替代巨集常數定義。
const inta =3;
== #define a3
內聯函式定義c++編譯器可以將乙個函式進行內聯編譯,被c++編譯器內聯編譯的函式叫做內聯函式
特點
c++中推薦使用內聯函式替代巨集**片段,c++中**使用inline關鍵字宣告內聯函式**。
**示例
inline
intfunc
(int a,int b)
注意:
內聯函式宣告時inline關鍵字必須和函式定義,結合在一起,否則編譯器會直接忽略內聯請求。**示例
#include
using
namespace std;
// 定義巨集函式
#define func(a, b) ((a) < (b) ? (a) : (b))
// 呼叫內聯函式
inline
intfunction
(int a,
int b)
intmain
(int argc,
char
*ar**)
程式執行結果
注意事項
c++中inline內聯編譯的限制
不能存在任何形式的迴圈語句,不能存在過多的條件判斷語句。函式體不能過於龐大,不能對函式進行取址操作。
函式內聯宣告必須在呼叫語句之前。
C 內聯函式 03
在c 中我們通常定義以下函式來求兩個整數的最大值 如下 int max int a,int b 為這麼乙個小的操作定義乙個函式的好處有 容易閱讀和理解函式 max 的呼叫,要比讀一條等價的條件表示式並解釋它的含義要容易得多 如果需要做任何修改,修改函式要比找出並修改每一處等價表示式容易得多 使用函式...
mysql 內聯函式 Kotlin內聯函式
內聯函式使用關鍵字內聯宣告,內聯函式的使用增強了高階函式的效能。內聯函式告訴編譯器將引數和函式複製到呼叫站點。虛函式或區域性函式不能宣告為內聯。以下是內聯函式內部不支援的一些表示式和宣告 區域性類宣告 內部巢狀類的宣告 函式表示式 宣告區域性函式 區域性可選引數的預設值 讓我們看一下內聯函式的基本示...
函式之內聯函式
內聯函式 定義 內聯函式是c 為提高程式執行速度所進行的一項改進。常規函式與內聯函式之間的區別不在於編寫方式,而在於c 編譯器如何將他們組合到程式裡。c 函式的編譯 與其他程式的 內聯 了起來,也就是說,編譯器將使用相應的函式 代替函式呼叫。對於內聯函式,程式無需調到另乙個位置處執行 再跳回來,因此...