c语言 inline函数的总结


标签: 语言c编译器汇编includegcc
  6678人阅读  评论(0)  收藏  举报

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意义的由来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值