- 内联函数具备一般函数的性质,但是不需要调用,而是在编译阶段,会用函数体替换函数名被调用的地方。可以节省调用时间(进出栈、保存上下文)。
- 在编译层面和宏的作用相同。内联函数的展开在编译阶段,宏展开在预处理阶段,一般函数执行时调用转移。
- 内联函数可以替代宏,弥补宏的一些缺陷。例如宏不能访问类内部的变量,宏定义时参数如果是计算式常出问题。
- 内敛函数使用的要求:
- 递归函数不能用作内联函数
- 内联函数一般不适合用于包含while等复杂结构的语句,一般都是1~5句简单句
- 先定义后使用
- 定义时必须连同函数体一起声明
-
1 //inline example 2 3 int main(){ 4 void print(int x){ 5 printf("%d ",x); 6 } 7 for( int i=0; i<100; i++ ) 8 print(i); 9 return 0; 10 } 11 12 // another example 13 inline void print( int x ){ 14 printf("%d",x); 15 } 16 17 int main(){ 18 for( int i=0; i<100; i++ ) 19 print(i); 20 return 0; 21 } 22 23 //macro example 24 #define ZERO_MAX(x) ( ( (x) > 0 ) ? (x) : 0 );