C语言inline函数使用

一、简述:

inline函数,定义为inline函数之后,会省去函数调用的开销,直接嵌套汇编代码,取代函数调用,提高效率。

在函数声明或定义中函数返回类型之前加上关键字inline。

比如:inline int min(int first,int second){ /***********/ };


对于同一个程序的不同文件,如果inline函数出现的话,其定义必须相同。如果定义不相同,程序将会出现未定义的行为。

为保证不会发生这样的事情,建议把inline函数的定义放到头文件中。在每个调用该inline函数中包含该头文件。这种方法保证对每个inline函数只有一个定义,且程序员无需复制代码,并且不可能在程序的生命期中引起无意的不匹配的事情。


二、内联函数的编程风格

1)、关键字inline必须与函数定义体放在一起才能使得函数称为内联。仅将inline放在函数声明前面不起任何作用。   <高质量C/C++编程指南>

如下风格的函数Foo 不能成为内联函数:
inline void Foo(int x, int y);  // inline 仅与函数声明放在一起

void Foo(int x, int y) { } 


而如下风格的函数Foo 则成为内联函数:

void Foo(int x, int y);
inline void Foo(int x, int y)    // inline 与函数定义体放在一起 { }


2)、定义在类声明中的成员函数将自动成为内联函数

例如:

class A{

public:

void Foo(int x,int y){ }         //自动地成为内联

}

将成员函数的定义体放在类声明之中虽然能带来书写上的方便,但不是一种良好的习惯,应该将上例中改为:

//头文件

class A{

public:

void Foo(int x,int y);

}

//定义文件

inline void A::Foo(int x,int y)

{

}


三、慎用内联函数

以下情况不宜使用内联:
(1)如果函数体内的代码比较长,使用内联将导致内存消耗代价较高。
(2)如果函数体内出现循环,那么执行函数体内代码的时间要比函数调用的开销大。


在C程序中,可以用宏代码提高执行效率。宏代码本身不是函数,但使用起来像函数。

预处理器用复制宏代码的方式代替函数调用,省去了参数压栈、生成汇编语言的CALL调用、  返回参数、执行return等过程,从而提高了速度。  
使用宏代码最大的缺点是容易出错,预处理器在复制宏代码时常常产生意想不到的边际效应。

所以,在C++中使用内联函数取代所有宏代码,除了“assert”断言。


四、总结一下:

1、inline函数不要超过10行代码,且不能包含循环、switch、if语句

2、在一个c文件中定义的inline函数是不能在其它c文件中直接使用,google推荐把inline函数定义在**-inl.h头文件中。

3、不要过度使用inline函数定义,尤其对大函数来说



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值