想看下內聯函數跟普通函數外觀有什麼區別
[cpp]
//內聯函數定義
inline int sum(int a,int b){
return a + b;
}
//普通函數定義
int sum1(int a,int b){
return a + b;
}
多了inline關鍵詞。
想起之前寫C語言,把一些重復做的事情封裝成一個函數,真是很大的進步。但是他們說調用函數比直接代碼要慢些。內聯函數有什麼好處呢?避免了函數調用的開銷。也就是說如果我寫下面的代碼:
printf("a+b=%d\n",sum(a,b));
它會把代碼展開變成
printf("a+b=%f\n",(a + b));
有點像宏。一般說來,內聯機制適用於優化小的,只有幾行的而且經常被調用的函數。還有遞歸函數大多也不支持。
內聯函數的定義對編譯器必須是可見的,以便編譯器能夠在調用點內聯展開該函數的代碼,所以僅有函數原型是不夠的。
完整代碼:
[cpp]
#include <stdio.h>
//內聯函數定義
inline int sum(int a,int b){
return a + b;
}
//普通函數定義
int sum1(int a,int b){
return a + b;
}
int main(int argc, char* argv[])
{
int a = 1,b = 2;
//下面的調用等於 printf("a+b=%f\n",(a + b));
printf("a+b=%d\n",sum(a,b));
//普通函數調用
printf("a+b=%d\n",sum1(a,b));
return 0;
}