代码编织梦想

By: Ailson Jack
Date: 2021.03.14
个人博客:http://www.only2fire.com/
本文在我博客的地址是:http://www.only2fire.com/archives/131.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。

1.基本概念

C语言中的inline关键字是C99标准的关键字,它的作用是将函数展开,把函数的代码复制到每一个调用该函数的地方。这样调用该函数的地方就可以直接执行函数代码,而不发生跳转、压栈等一般性函数操作。可以节省时间,也会提高程序的执行速度。

使用inline关键字修饰的函数就是内联函数。

在C语言中,如果一些函数被频繁的调用,尤其是这些函数在递归函数中被调用,那么如果递归过程很长,就有可能出现递归还没完成,但是栈空间被用完了。此时如果将这些函数定义为内联函数,那么在递归函数中,内联函数是不会发生函数跳转和压栈操作的,因此也就不存在栈溢出的情况了。

2.内联函数的定义方法

将一个函数定义为内联函数是比较简单的,直接在定义函数的时候,在函数的前面添加inline关键字即可。

内联函数(inline函数)一般和static一起使用,如果内联函数定义在.c文件中定义并且和static关键字一起使用,那么这个内联函数的作用域就是当前的.c文件,其他.c文件不能使用该内联函数;如果内联函数在.h文件中定义并且和static关键字一起使用,那么这个内联函数能够被包含该.h文件的所有源文件或者头文件使用。

内联函数的定义方法如下:

static inline add(int a, int b)

{

    return (a + b);

}

3.内联函数使用场景

如果函数本身比较简洁,并且函数使用的频率比较高,那么就可以将函数定义为内联函数。当然了,如果函数本身比较简洁,但是使用的频率不高,也可以将函数定义为内联函数。

在嵌入式开发中,内联函数还是比较重要的,将一些功能简洁的函数定义为内联函数,可以减少代码的跳转和栈空间的使用,RAM在嵌入式系统中还是比较宝贵的。

使用内联函数可以使程序的执行效率更高,同时是代码更紧凑。当然了使用内联函数的缺点也比较明显,就是程序的大小会变大(程序占用flash的空间变大,占用的RAM不变),因为每一个调用内联函数的地方,都会有一个内联函数的拷贝。

4.内联函数和宏定义的一些对比

内联函数在某种程度上和宏定义很想,比如上述的内联函数可以使用宏定义来描述:

#define add(a, b)   ((a) + (b))

虽然内联函数和宏很像,但是在使用方法上和宏还是有很大区别的,下面就从几个方面来对内联函数和宏进行对比:

(1).展开的时机:

内联函数在编译的时候展开,因此inline关键字是一个编译关键字。

宏是在预处理时展开,因此#define关键字是一个预处理关键字。

(2).参数类型检查:

内联函数会进行严格的参数类型检查。

宏不会检查参数类型,只是做简单的字符串替换,因此在使用带参数的宏时会有一些副作用,编写程序时要人为预防。

(3).是否允许有复杂语句

内联函数不允许出现复杂语句,如果出现复杂语句,该函数将不会展开,例如递归,大型循环等。

宏定义对此不做要求。宏只是做字符串替换操作,而不了解语句的含义。

(4).是否一定被展开

内联函数不一定会被展开,是否展开是由编译器决定的。

宏一定会被展开,只要使用了宏就可以保证被展开。

如果文中有什么问题欢迎指正,毕竟博主的水平有限。

如果这篇文章对你有帮助,记得点赞和关注博主就行了^_^。
排版更好的内容见我博客的地址:http://www.only2fire.com/archives/131.html
注:转载请注明出处,谢谢!^_^

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jackailson/article/details/114781887

c/c++ 语言中inline 关键词解释_challenge_and_smiles的博客-爱代码爱编程

inline函数与普通函数的区别 举例 以下例子均是在比较老的gcc中比较普遍的例子,只是方便理解,实际上gcc等编译器现在已经能够 识别部分短小函数自动将其变为内联函数。 普通函数 int g(int x) { return x+x; } int f() { return g(); } 这样f函数会调用g函数,g函数将x+x的值返回给f

c语言inline函数说明_mountainest的博客-爱代码爱编程_inline函数

一句话总结:inline函数的定义(而不是申明)一般必须在头文件或本C文件内使用之前。 inline是一种“用于实现的关键字”,而不是一种“用于声明的关键字”。关键字inline必须与函数实现放在一起才能使函数成为内联,仅将inline放在函数声明前面不起任何作用。 如果内联函数在调用之后才定义,则编译器不会进行函数体替换,只会作为一个普通的函数调用。

c语言中的inline内联函数解析-爱代码爱编程

        在C语言中,为了解决一些频繁调用的小函数大量消耗栈空间或是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数。         栈空间就是指放置程序的局部数据也就是函数内数据的内存空间。         那么在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足所造成的程序出错的问题:比如函数的死循环递归调用的最终

c语言inline关键字_weixin_34198583的博客-爱代码爱编程

2019独角兽企业重金招聘Python工程师标准>>> 一、inline关键字的概念 inline关键字是C99标准的型关键字,其作用是将函数展开,吧函数的代码复制到每一个调用处。这样调用函数的过程就可以直接执行函数代码,而不发生跳转、压栈等一般性函数操作。可以节省时间,也会提高程序的执行速度。

c语言inline有什么作用,C语言inline关键字-爱代码爱编程

一、inline关键字的概念 inline关键字是C99标准的型关键字,其作用是将函数展开,吧函数的代码复制到每一个调用处。这样调用函数的过程就可以直接执行函数代码,而不发生跳转、压栈等一般性函数操作。可以节省时间,也会提高程序的执行速度。 二、inline关键字实例 在编写程序过程中,对于短小而且需要频繁调用的函数,可以将其声明为inlin

inline在C语言中是什么作用意思,C语言中内联函数inline的使用方法-爱代码爱编程

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 来源一:比特网 来源二:东方锐智 在C++中,为了解决一些频繁调用的小涵数大量消耗栈空间或者是叫栈内存的问题,特别的引入了inline修饰符,表示为内联涵数。 可能说到这里,很多人还不明白什么是栈空间,其实栈空间就是指放置程序的局部数据也就是函数内数据的内存空间,在系统下,栈空间是有限的,如果频繁大量

c语言什么是内联函数,C语言中内联函数inline的使用方法-爱代码爱编程

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 来源一:比特网 来源二:东方锐智 在C++中,为了解决一些频繁调用的小涵数大量消耗栈空间或者是叫栈内存的问题,特别的引入了inline修饰符,表示为内联涵数。 可能说到这里,很多人还不明白什么是栈空间,其实栈空间就是指放置程序的局部数据也就是函数内数据的内存空间,在系统下,栈空间是有限的,如果频繁大量