inline关键字是编译关键字,inline关键字是C99标准的型关键字,其作用是将函数展开,把函数的代码复制到每一个调用处。这样调用函数的过程就可以直接执行函数代码,而不发生跳转、压栈等一般性函数操作。可以节省时间,也会提高程序的执行速度。
1、关键字inline必须与函数的定义体放在一起,才能使函数成为内联函数,仅仅将inline放在函数声明前面不起作用
例如,下面风格的函数fun将不能成为内联函数:
inline void fun(int x, int y); //inline仅仅与函数声明放在一起
void fun(int x, int y)
{
}
如下风格的函数fun则成为内联函数:
void fun(int x, int y);
inline void fun(int x, int y) //inline与函数的定义放在一起
{
}
2.inline只适合函数体内代码比较简单的函数使用,不能包含复杂的结构控制语句,例如while、switch,并且内联函数本身不能是直接递归函数(函数内部调用自己的函数)。
3. inline仅是一个对编译器的建议
inline函数仅仅是一个对编译器的建议,所以最后能否真正内联,看编译器的意思,它如果认为函数不复杂,能在调用点展开,就会真正内联,并不是说声明了内联就会内联,声明内联只是一个建议而已。
4. 建议:inline函数的定义放在头文件中
5. 慎用inline
内联能提高函数的执行效率,为什么不把所有的函数都定义成内联函数?如果所有的函数都是内联函数,还用得着“内联”这个关键字吗?
内联是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。 如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收获会很少。另一方面,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。
6.
inline和#define的区别:
inline由编译器一起处理,直接将比那以后的函数体插入调用的地方。
#define由预处理器处理,进行简单的文本替换,没有任何编译过程。