内联函数

在C语言中,如果一些函数被频繁的调用,不断地用函数入栈,即函数栈,则会造成栈空间或者栈内存的大量消耗,为了解决这个问题,特别的引入了inline关键字,表示为内联函数。栈空间指的是函数内数据的内存空间,在一个系统下,栈空间的资源是有限的,假如频繁大量的使用就会因栈空间的不足而导致出错,函数的死循坏递归调用的最终结果就是导致栈内存空间的枯竭。

#include <stdio.h>

//函数定义为内联函数
inline char *dbtest(int a)
{
    return (i % 2 > 0 ? "奇""偶");
}

int main()
{
    int i = 0;
    for (i = 1; i < 100; i++)
    {
        printf("i:%d  奇偶性:%s /n", i, dbtest(i));
    }
    return 0;
}

此例子就是内联函数的标准用法,使用内联函数带来的好处就是,在每个for循坏内部任何调用dbtest(i)的地方都将会替换成(i % 2 > 0 ? "奇" : "偶"),因此,通过这样子的替换就可以避免了频繁调用函数对栈内存重复开辟所带来的消耗。

内联函数风格

  1. 关键字inline必须与函数的定义体放在一起,才能使函数成为内联函数,仅仅将inline放在函数声明前面不起作用

  2. 关键字inline的使用是有所限制的: inline只适合函数体内代码比较简单的函数使用,不能包含复杂的结构控制语句,例如while、switch,并且内联函数本身不能是直接递归函数(函数内部调用自己的函数)。

static和inline联合使用

static是静态修饰符,由其关键字修饰的变量会保存到全局数据区,对于普通的局部变量或者全局变量,都是由系统自动分配内存的,并且当变量离开作用域的时候释放掉,而使用static关键字来修饰,只有当程序结束时候才会释放掉,使用static inline修饰时,函数仅在文件内部可见,不会污染命名空间,另外,函数在运行过程中也会分配内存空间,但是由于static的存在,就和修饰变量类似,它只会开辟一块内存空间。

文档更新时间: 2021-03-03 15:44   作者:周国强