[每日C语言」内联函数inline

2021-03-04    分类: 网站建设

通常函数调用需要一定的时间开销。这意味着执行调用时需要花费时间用于建立调用、传递参数,跳转到函数代码段并返回。

我们知道使用类函数宏的一个原因就是可减少执行时间。

C99提供另一方法:内联函( nline function)。C99标准这样叙述:“把函数变为内联函数将建议编译器尽可能快速地调用该函数,上述建议的效果由实现来定义”。因此,使函数变为内联函数可能会简化函数的调用机制,但也有可能不起作用。

创建内联函数的方法是在函数声明中使用函数说明符 inline。通常,首次使用内联函数前在文件中对该函数进行定义。因此,该定义也作为函数原型。也就是说,代码应像下面这样:


编译器看到内联声明后会用 eatline()函数体代替函数调用,其效果如同您在此处键入了函数体的代码:


看一个直观简单的内联函数的例子:


这是标准的内联函数的用法,在每个for循环的内部任何调用dbtest(i)的地方都换成了(i%2>0)?"奇":"偶"这样就避免了频繁调用函数对栈内存重复开辟所带来的消耗。

内联函数的特点:

  • 关键字inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用。这就意味着内联函数的定义和对该函数的调用必须在同一个文件中,正是由于这样,内联函数通常具有内部链接,因此,在多文件程序中,每一个调用内联函数的文件都要对该函数进行定义。达到这个目标最简单的方法是:在头文件中定义内联函数,并在使用该函数的文件中包含该头文件。我们一般不在头文件中放置可执行代码,但是内联函数是一个意外,它具有内部链接,所以在多个文件中定义同一个内联函数不会产生什么问题。
  • inline只适合函数体内代码简单的函数使用,不能包含复杂的结构控制语句。例如while、switch,并且内联函数本身不能是直接递归函数。
  • 内联是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收获会很少。另一方面,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间

本文题目:[每日C语言」内联函数inline
新闻来源:/news48/104098.html

成都网站建设公司_创新互联,为您提供搜索引擎优化面包屑导航网站导航网站内链用户体验微信小程序

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站托管运营