關內聯函數鍵字inline
void myprintf(int a) { priintf("%d",a); } int main() { for(i=0;i<100;i++) myprintf(3); }
對於這個函數,在進行反復的打印3的過程中我們是不是要反復的調用myprintf(int a)這個函數,進函數和出函數是需要時間的,假設這個過程用時為4ms,而執行printf這個操作只需要2ms,那麼在100次循環的過程中進出函數的時間比函數功能printf需要的時間還要長,這樣很影響工作效率。於是,我們就想要如何去免去進出函數的過程呢?那麼就可以聲明inline這個關鍵字,有何用途?當我們聲明了一個inline的函數時候,函數被調用的語句就被替換成了函數本身,進行了一個預處理
int main() { for(i=0;i<100;i++) void myprintf(3) { printf("%d",3); } return 0; }
這樣一來我就非常明顯的知道這個函數是干什麼的了,就不需要去調用函數的定義部分,再通俗點講,原來我要從家裡去外面的商店去買冰淇淋(來回需要時間),現在商店就在我家裡面了,那麼我是不是省去了去商店的時間呢?但是相應的我這個家要很大(也就是所謂的空間要很大才能包含這個商店對吧?)這樣就是用空間去換取了時間了。
內聯函數在編譯層面類似於宏替換。也就是說,程序執行過程中調用內聯函數不需要入棧出棧,所以效率會提高。
#include<stdio.h> inline int add(int x, int y) { return x+y; } int main() { int i,j,k; printf("請輸入兩個整數的值:"); scanf("%d%d",&i,&j); k=add(i,j); printf("k=%d\n",k); return 0; }