inline函数与普通函数的区别

inline函数与普通函数的区别

举例

以下例子均是在比较老的gcc中比较普遍的例子,只是方便理解,实际上gcc等编译器现在已经能够识别部分短小函数自动将其变为内联函数。

普通函数

int g(int x)
{
    return x+x;
}

int f()
{
    return g();
}

这样f函数会调用g函数,g函数将x+x的值返回给f,然后f返回该返回值

但如果g是inline函数的话(内联函数)

内联函数(inline函数)

int inline g(int x)
{
    return x+x;
}

int f()
{
    return g();
}

那么实际编译结果是

int f()
{
    return x+x;
}

这里实际就相当于把g()函数的代码直接融合到f函数中,这样就会减少调用g函数的时间,从而提升效率

虽然缺点会增加f函数编译后的长度,所以inline函数不能过长

现代的inline函数(内联函数)

前面有说到实际上编译器可以自动将短小的可以内联的函数自动内联,并不是只有前面带有inline标识的函数才会将其视作内联函数在这里不禁要感叹一下编译器的超级强大的功能

但是inline本身还是有另外一个区别

一个可执行文件的源代码中,同一个函数只能被定义一次;所以,你如果把函数定义放在.h头文件中,然后有两个.c源文件同时包含该头文件,就会出现函数重复定义的错误,但是,如果将该函数声明为inline函数,则不会报错。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值