美文网首页
C 内联函数

C 内联函数

作者: 苏沫离 | 来源:发表于2018-12-02 22:18 被阅读0次

函数调用会有一定的开销,因为函数的调用过程包括建立调用、传递参数、跳转到函数代码并返回。

通过宏使代码内联,可以避免函数调用的开销;不过,使用宏容易出问题,C99 提供了另一种方法“内联函数”。将函数变成内联函数,编译器可能会使用内联代码替换函数调用,并执行一些其它的优化。

C 标准规定:具有内部链接的函数可以成为内联函数。内联函数的定义与调用该函数的代码必须在同一文件中。使用函数说明符inline和存储类别说明符static来定义内联函数。

inline static long factorial(int n)//内联函数定义/声明
{
    long ans;
    for (ans = 1; n > 1; n--)
        ans *= n;
    return ans;
}

int main(int argc, const char * argv[]) {
    long result = factorial(10);//内联函数调用
    printf("循环计算阶乘: 10! = %ld \n",result);
    return 0;
}

编译器查看内联函数的定义,可能会用函数体中的代码替换factorial()函数调用,效果相当于在函数调用的位置插入函数体重的代码:

int main(int argc, const char * argv[]) {
    
    long result;
    int n = 10;
    for (result = 1; n > 1; n--)
        result *= n;
    
    printf("循环计算阶乘: 10! = %ld \n",result);
    return 0;
}

由于并未给内联函数预留单独的函数块,所以无法获取内联函数的地址(实际上可以获取地址,但是这样做后,编译器会生成一个非内联函数)。另外内联函数无法在调试器中显示。

一般而言,内联函数比较短小,把较长的函数变成内联函数并未节约多少时间,因为执行函数体的时间比调用函数的时间长得多。

编译器优化内联函数必须知道该函数定义的内容:这要求内联函数与函数调用必须定义在同一个文件中。一般情况下,内联函数都具有内部链接。
如果多个文件使用要某个内联函数,那么这些文件都必须包含这个内联函数。我们可以将这个内联函数定义在某个头文件,在使用该内联函数的文件包含该头文件即可:

#ifndef LineIN_h
#define LineIN_h

inline static long factorial(int n)//内联函数定义/声明
{
    long ans;
    for (ans = 1; n > 1; n--)
        ans *= n;
    return ans;
}

#endif 

一般都不在头文件放置可执行代码,但内联函数是个特例。内联函数具有内部链接,所以在多个文件定义同一个内联函数不会有什么问题。

相关文章

  • 宏定义min

    C++内联函数

  • 《C++ Primer Plus》:函数探幽

    本章内容概览 内联函数 引用变量 按引用传递函数参数 默认参数 函数重载 函数模板 内联函数 内联函数是C++为提...

  • iOS开发中的内联函数

    1、内联函数 内联函数(又被称为在线函数或编译时期展开函数)是指在用inline修饰的函数(这里指的是C++或者C...

  • 白话kotlin:内联函数助你提升运行效率

    什么是内联函数 这个玩意吸取自C++,如下: 内联函数是C++的增强特性之一,用来降低程序的运行时间。当内联函数收...

  • C++基础-(函数)

    C++基础 函数 内联函数 内联函数非常短的函数适合于内联函数体会到插入到发生函数调用的地方普通函数调用多次也只有...

  • 第九章 内联函数

    简介:C++中预处理器宏存在的问题,在C++中如何用内联函数解决这些问题以及使用内联函数的方针和内联函数的工作机制...

  • C++内联函数与C语言函数宏

    C++内联函数 什么是内联函数? 在函数的声明和定义前加一个 inline 关键字,这个函数就是内联函数。 通常会...

  • Kotlin 内联函数 inline

    Kotlin 中新增了「内联函数」,内联函数起初是在 C++ 里面的。 那在 Kotlin 中加入内联函数,是有什...

  • C 内联函数

    函数调用会有一定的开销,因为函数的调用过程包括建立调用、传递参数、跳转到函数代码并返回。 通过宏使代码内联,可以避...

  • C++内联函数inline

    C++内联函数inlineC++ 内联函数是通常与类一起使用。如果一个函数是内联的,那么在编译时,编译器会把该函数...

网友评论

      本文标题:C 内联函数

      本文链接:https://www.haomeiwen.com/subject/iquscqtx.html