C语言-inline关键字
 2021.03.14    |      C/C++    |     AilsonJack    |     暂无评论    |     426 views
By: Ailson Jack
Date: 2021-03-14
个人博客: http://www.only2fire.com/
<p class="artical_littlestyle1">1.基本概念</p><p>C语言中的inline关键字是C99标准的关键字,它的作用是将函数展开,把函数的代码复制到每一个调用该函数的地方。这样调用该函数的地方就可以直接执行函数代码,而不发生跳转、压栈等一般性函数操作。可以节省时间,也会提高程序的执行速度。<br/>使用inline关键字修饰的函数就是内联函数。<br/>在C语言中,如果一些函数被频繁的调用,尤其是这些函数在递归函数中被调用,那么如果递归过程很长,就有可能出现递归还没完成,但是栈空间被用完了。此时如果将这些函数定义为内联函数,那么在递归函数中,内联函数是不会发生函数跳转和压栈操作的,因此也就不存在栈溢出的情况了。<br/></p><p class="artical_littlestyle2">2.内联函数的定义方法</p><p>将一个函数定义为内联函数是比较简单的,直接在定义函数的时候,在函数的前面添加inline关键字即可。<br/>内联函数(inline函数)一般和static一起使用,如果内联函数定义在.c文件中定义并且和static关键字一起使用,那么这个内联函数的作用域就是当前的.c文件,其他.c文件不能使用该内联函数;如果内联函数在.h文件中定义并且和static关键字一起使用,那么这个内联函数能够被包含该.h文件的所有源文件或者头文件使用。<br/>内联函数的定义方法如下:<br/><span style="color: rgb(0, 112, 192);">static inline add(int a, int b)<br/>{<br/>&nbsp;&nbsp;&nbsp; return (a + b);<br/>}</span><br/></p><p class="artical_littlestyle3">3.内联函数使用场景</p><p>如果函数本身比较简洁,并且函数使用的频率比较高,那么就可以将函数定义为内联函数。当然了,如果函数本身比较简洁,但是使用的频率不高,也可以将函数定义为内联函数。<br/>在嵌入式开发中,内联函数还是比较重要的,将一些功能简洁的函数定义为内联函数,可以减少代码的跳转和栈空间的使用,RAM在嵌入式系统中还是比较宝贵的。<br/><span style="color: rgb(0, 112, 192);">使用内联函数可以使程序的执行效率更高,同时是代码更紧凑。当然了使用内联函数的缺点也比较明显,就是程序的大小会变大(程序占用flash的空间变大,占用的RAM不变),因为每一个调用内联函数的地方,都会有一个内联函数的拷贝。</span><br/></p><p class="artical_littlestyle4">4.内联函数和宏定义的一些对比</p><p>内联函数在某种程度上和宏定义很想,比如上述的内联函数可以使用宏定义来描述:<br/><span style="color: rgb(0, 112, 192);">#define add(a, b)&nbsp;&nbsp; ((a) + (b))</span><br/>虽然内联函数和宏很像,但是在使用方法上和宏还是有很大区别的,下面就从几个方面来对内联函数和宏进行对比:<br/>(1).展开的时机:<br/>内联函数在编译的时候展开,因此inline关键字是一个编译关键字。<br/>宏是在预处理时展开,因此#define关键字是一个预处理关键字。<br/>(2).参数类型检查:<br/>内联函数会进行严格的参数类型检查。<br/>宏不会检查参数类型,只是做简单的字符串替换,因此在使用带参数的宏时会有一些副作用,编写程序时要人为预防。<br/>(3).是否允许有复杂语句<br/>内联函数不允许出现复杂语句,如果出现复杂语句,该函数将不会展开,例如递归,大型循环等。<br/>宏定义对此不做要求。宏只是做字符串替换操作,而不了解语句的含义。<br/>(4).是否一定被展开<br/>内联函数不一定会被展开,是否展开是由编译器决定的。<br/>宏一定会被展开,只要使用了宏就可以保证被展开。<br/></p>
欢迎关注博主的公众号呀,精彩内容随时掌握:
热情邀请仔细浏览下博客中的广告,万一有对自己有用或感兴趣的呢。◕ᴗ◕。。
如果这篇文章对你有帮助,记得点赞和关注博主就行了^_^,当然了能够赞赏博主,那就非常感谢啦!
注: 转载请注明出处,谢谢!^_^
转载请注明来源: 本文链接:  By: AilsonJack
C语言-inline关键字  |  说好一起走
暂无评论,要不要来个沙发
发表评论

 
Copyright © 2015~2023  说好一起走   保留所有权利   |  百度统计  蜀ICP备15004292号