前言
很长时间没有动过博客了,忽然回来是因为自己觉得作为刚入门的大一学生,经典书籍C Primer Plus和C++ Primer等确实在抱着极高的热情在阅读,阅读速度很快,但是可能相应的理解并没有完全透彻,因此觉得还是有必要来写下博客对知识点进行一些梳理。所以就开始认真地记下我的第一篇博客吧( •̀ ω •́ )✧
何为内联函数及为何使用
将函数指定为内联函数,通常也就是将它在每个调用点上内联地展开,使编译器用内联代码替换函数调用,并可能执行一些其他的优化。
例如:
inline static void eatline(); //内联函数定义/原型
{
while (getchar()!='\n')
continue;
}
int main()
{
eatline(); //编译器会用函数体中的代码替换eatline()的调用
}
//即主函数相当于
int main()
{
while (getchar()!='\n')
continue;
}
因为编译器在使用函数时并非调用,而是直接将函数体的代码展开在调用点上,所以避免了函数调用时的例如建立调用、传递参数、跳转到函数代码等一系列开销,提高了程序运行效率。
使用时的注意点
-
内联函数通常放在头文件内。内联函数是一个将可执行代码置于头文件中的特例。
-
标准规定具有内部链接的函数可以成为内联函数。
-
与C++不同的是,C还允许混合使用内联函数定义和外部函数定义(具有外部链接的函数定义)
例如
inline double square(double x) {return (int) (x*x+0.5);} //无static void masp(double w) { double kw=square(w); }
此例中,编译器实际上既可以使用该文件中square()函数的内联定义,也可以使用另一文件中的外部链接定义。即被视为可替换的外部定义