在呼叫函式時會有額外的資源負擔,一些小函式,可以「建議」編譯器設為 inline 行內,若建議被採納,該函式會自動在呼叫點展現為程式碼,例如:
math.h
int power2(int);
int power(int, int);
配合標頭檔,可以如下實作 power
函式本體:
math.c
#include "math.h"
inline int power2(int num) {
return num * num;
}
int power(int n, int p) {
int r = 1;
for(int i = 0; i < p; i++) {
r *= n;
}
return r;
}
呼叫函式時不用任何改變,例如:
main.c
#include <stdio.h>
#include "math.h"
int main(void) {
int num = 0;
int p = 0;
printf("輸入數值:");
scanf("%d", &num);
printf("輸入平方:");
scanf("%d", &p);
printf("%d 平方:%d\n", num, power2(num));
printf("%d 的 %d 次方 %d\n", num, p, power(num, p));
return 0;
}
inline
函式只能建議編譯器,建議不一定被採納,例如遞迴函式無法在呼叫點展開,數千行的函式也不適合在呼叫點展開,如果編譯器拒絕將函式展開,會視為一般函式進行編譯,inline
的建議會被忽略。
C99 的 inline
規則,與 GNU 的 inline
規則有所不同,詳情可參考〈Inline Functions In C〉。