C/C++知识点之C语言inline函数
小标 2018-11-26 来源 : 阅读 865 评论 0

摘要:本文主要向大家介绍了C/C++知识点之C语言inline函数,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之C语言inline函数,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。


1  inline只是个编译器建议,编译器不一定非得展开Inline函数。
    例如:
             Inline函数地址引用
             inline在递归函数中使用
  
2  inline必须用于函数定义,对于函数声明,inline不起作用
    例如:
     inline max(int,int);  //没有Inline作用
    
     只有 inline max(int a,int b)
             {
                 ......
              }
     才有用。
 
3  inline定义的函数 和 宏定义一样,只在本地文件可见。所以建议Inline定义的函数放在头文件中
 
4  gcc中的Inline函数法则
 
    1. static inline --->编译器本地展开。
    2. inline--->本地展开,外地为Inline函数生成独立的汇编代码
    3. extern inline--->不会生成独立的汇编代码。
 
        特性1.即使是通过指针应用或者是递归调用也不会让编译器为它生成汇编码,在这种时候对此函数的调用会被处理成一个外部引用
        特性2.extern inline的函数允许和外部函数重名,即在存在一个外部定义的全局库函数的情况下,再定义一个同名的extern inline函数也是合法的。
 
extern inline的用处:
 
在一个库函数的c文件内,定义一个普通版本的库函数foo:
mylib.c:
     void foo()
      {   
           ...;
       }
 
然后再在其头文件内,定义(注意不是声明!)一个实现相同的exterin inline的版本:
 
mylib.h:
       extern inline foo()
       {   
             ...;
        }
那么在别的文件要使用这个库函数的时候,只要include了mylib.h,在能内联展开的地方,编译器都会使用头文件内extern inline的版本来展开。
而在无法展开的时候(函数指针引用等情况),编译器就会引用mylib.c中的那个独立编译的普通版本。
即看起来似乎是个可以在外部被内联的函数一样,所以这应该是gcc的extern inline意义的由来。

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程