c语言inline有什么作用,C语言inline关键字

一、inline关键字的概念

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

a9b4717c3f6f6c136dabfa5c686044ba.png

二、inline关键字实例

在编写程序过程中,对于短小而且需要频繁调用的函数,可以将其声明为inline()函数。在调用该函数的过程中编译器会自动选择是否展开该函数。下面实例模拟了一个inline函数的展开。注意,这只是一个原理性的实现方式,具体的展开会因编译器的不同而不同:

#include

//声明一个inline()函数add,执行两个数据的加法,返回两个数据的和

inline int f(int a, int b);

int main(void)

{

int c;

//调用inline函数,这部分内容在inline函数展开时会被add函数的代码所取代

c = f(1, 2);

printf("add : %d\n", c);

return 0;

}

int f(int a, int b)

{

return a + b;

}

inline函数的展开通常是在汇编阶段开始的。使用gcc编译器的“-S”选项可以观察源文件编译后的汇编代码。

三、inline关键字使用总结

使用inline关键字可以使程序的执行效率更高,同时是代码更紧凑。但是并不是所有的函数都可以将其声明为inline函数,因此使用inline函数还应注意一下几个问题:

函数的展开是由编译器来决定的,这一点对程序员是透明的

只有在代码很短的情况下,函数才会被展开。递归函数是不会被展开的。

inline函数在某种程度上来讲很像带参数的宏,例如对于上述两个数的求和操作,也可以定义为宏:

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

虽然inline函数和带参数的宏很像,但是在使用方法上和宏还是有很大区别的:

inline函数和带参数的宏的区别

inline()函数

带参数的宏

展开的时机

在编译的时候展开,因此inline关键字是一个编译关键字

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

参数类型检查

inline()函数是一中函数,会进行严格的参数类型检查

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

是否允许有复杂语句

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

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

是否一定被展开

不一定,是否展开由编译器决定

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

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值