C语言的内联函数的作用

内联函数从 源代码 层看,有函数的结构,而在编译后,却不具备函数的性质。内联函数不是在调用时发生控制转移,而是在 编译时 将函数体嵌入在每一个调用处。编译时, 类似宏替换 ,使用 函数体 替换调用处的函数名。一般在代码中用inline修饰,但是能否形成内联函数,需要 编译器 该函数定义的具体处理。
[cpp]  view plain copy
  1. void myprintf(int a)  
  2. {  
  3.   priintf("%d",a);  
  4. }  
  5.   
  6. int main()  
  7. {  
  8. for(i=0;i<100;i++)  
  9. myprintf(3);  

对于这个函数,在进行反复的打印3的过程中我们是不是要反复的调用myprintf(int a)这个函数,进函数和出函数是需要时间的,假设这个过程用时为4ms,而执行printf这个操作只需要2ms,那么在100次循环的过程中进出函数的时间比函数功能printf需要的时间还要长,这样很影响工作效率。于是,我们就想要如何去免去进出函数的过程呢?那么就可以声明inline这个关键字,有何用途?当我们声明了一个inline的函数时候,函数被调用的语句就被替换成了函数本身,进行了一个预处理

[cpp]  view plain copy
  1. int main()  
  2. {  
  3. for(i=0;i<100;i++)  
  4. void myprintf(3)  
  5. {  
  6. printf("%d",3);  
  7. }  
  8. return 0;  
  9. }  


 

这样一来我就非常明显的知道这个函数是干什么的了,就不需要去调用函数的定义部分,再通俗点讲,原来我要从家里去外面的商店去买冰淇淋(来回需要时间),现在商店就在我家里面了,那么我是不是省去了去商店的时间呢?但是相应的我这个家要很大(也就是所谓的空间要很大才能包含这个商店对吧?)这样就是用空间去换取了时间了。

内联函数在编译层面类似于宏替换。也就是说,程序执行过程中调用内联函数不需要入栈出栈,所以效率会提高。

 

[cpp]  view plain copy
  1. #include<stdio.h>  
  2. inline int add(int x, int y)  
  3. {  
  4.     return x+y;  
  5. }  
  6.   
  7. int main()  
  8. {  
  9.  int i,j,k;  
  10.  printf("请输入两个整数的值:");  
  11.  scanf("%d%d",&i,&j);  
  12.  k=add(i,j);  
  13.  printf("k=%d\n",k);  
  14.  return 0;  
  15.   
  16. }  
使用内联函数的时候要注意:
1.递归函数不能定义为内联函数
2.内联函数一般适合于不存在while和switch等复杂的结构且只有1~5条语句的小函数上,否则编译系统将该函数视为普通函数。
3.内联函数只能先定义后使用,否则编译系统也会把它认为是普通函数。
4.对内联函数不能进行异常的接口声明。

你可能感兴趣的:(C语言的内联函数的作用)