From Gossip@caterpillar

C Gossip: 行內函式(Inline function)

函式簡介 中的範例,有一個pow2()函式:
int pow2(int num) {
    return num*num;
}

在呼叫函式時會需要分配記憶空間因而需要額外的資源負擔,像pow2()這樣的小函式,可以「建議」編譯器將之設定為「行內函式」(Inline function),如果建議被採納,則該函式會自動在呼叫點展現為程式碼,行內函式建議可以直接定義於表頭檔案中,例如:
  • math.h
inline int myPow2(int);
int myPow(int, int);

配合表頭檔案,您可以如下實作 pow()函式本體:
  • math.c
#include "math.h"

int myPow(int n, int p) {
int r = 1;
int i;
for(i = 0; i < p; i++) {
r *= n;
}

return r;
}

至於範例主函式則不變,如下所示:
  • main.c
#include <stdio.h>
#include "math.h"

int main(void) {
int num = 0;
int power = 0;

printf("輸入數值:");
scanf("%d", &num);

printf("輸入平方:");
scanf("%d", &power);

printf("%d 平方:%d\n", num, myPow2(num));
printf("%d 的 %d 次方 %d\n", num, power, myPow(num, power));

return 0;
}

行內函式只能建議編譯器,也就是說建議並不一定會被採納,這視您的編譯器而定,像是使用到goto、static變數、迴圈、switch等等,這些編譯 器可能不接受行內函式的建議,遞迴函式也無法在呼叫點展開,一個數千行的函式也不適合在呼叫點展開,如果編譯器拒絕將函式展開,它會將該函式視為一般函式 進行編譯,inline的建議會被忽略。