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函数,则不会报错。

发布了242 篇原创文章 · 获赞 84 · 访问量 96万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览