概述
一、简述:
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函数定义,尤其对大函数来说
最后
以上就是清新电灯胆为你收集整理的C语言inline函数使用的全部内容,希望文章能够帮你解决C语言inline函数使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复