在调用函数时会有额外的资源负担,一些小函数,可以「建议」编译器设为 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〉。