我是靠谱客的博主 明亮山水,最近开发中收集的这篇文章主要介绍C语言内联函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

当编译器发现某段代码在调用一个内联函数时,它不是去调用该函数,而是将该函数的代码,整段插入到当前位置。这样做的好处是省去了调用的过程,加快程序运行速度。(函数的调用过程,由于有前面所说的参数入栈等操作,所以总要多占用一些时间)。这样做的不好处:由于每当代码调用到内联函数,就需要在调用处直接插入一段该函数的代码,所以程序的体积将增大。

内联函数在编译时展开

使用内联函数时应注意以下几个问题:

(1) 在一个文件中定义的内联函数不能在另一个文件中使用。它们通常放在头文件中共享。 
(2) 内联函数应该简洁,只有几个语句,如果语句较多,不适合于定义为内联函数。 
(3) 内联函数体中,不能有循环语句、if语句或switch语句,否则,函数定义时即使有inline关键字,编译器也会把该函数作为非内联函数处理。 
(4) 内联函数要在函数被调用之前声明。关键字inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用。

与宏的比较

通常,在C语言中,内联展开的功能由带参宏(Macros)在源码级实现。内联提供了几个更好的方法:

  • 宏调用并不执行类型检查,甚至连正常参数也不检查,但是函数调用却要检查。

  • C语言的宏使用的是文本替换,可能导致无法预料的后果,因为需要重新计算参数和操作顺序。

  • 在宏中的编译错误很难发现,因为它们引用的是扩展的代码,而不是程序员键入的。

  • 许多结构体使用宏或者使用不同的语法来表达很难理解。内联函数使用与普通函数相同的语言,可以随意的内联和不内联。

  • 内联代码的调试信息通常比扩展的宏代码更有用。

最后

以上就是明亮山水为你收集整理的C语言内联函数的全部内容,希望文章能够帮你解决C语言内联函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部