• 【C语言天天练(二一)】内联函数


            引言:调用函数时,一般会由于建立调用、传递參数、跳转到函数代码并返回等花费掉一些时间,C语言的解决的方法是使用类函数宏。在C99中,还提出了第二种方法:内联函数。

            内联函数:把函数变为内联函数将建议编译器尽可能高速地调用该函数,至于建议的效果则由实现来定义。因此,使函数变为内联函数可能会简化函数的调用机制,但也可能不起作用。内联函数是通过编译器来实现的,而宏则是在预编译的时候替换。

    创建内联函数方法:在函数声明中使用函数说明符inline。


    内联函数的特点:

    1、类似于宏,编译器在看到内联函数声明时,就会在使用内联函数时用函数体取代函数调用,其效果就如同在此处键入了函数体的代码。如:

    源代码:

    #include <stdio.h>
    inline void eatline()	//内联函数的定义
    {
    	while(getchar() != '
    ')
    		continue;
    }
    
    int main()
    {
    	eatline();		//函数调用
    }
    通过编译器编译事实上的效果例如以下:

    #include <stdio.h>
    inline void eatline()	//内联函数的定义
    {
    	while(getchar() != '
    ')
    		continue;
    }
    
    int main()
    {
    	while(getchar() != '
    ')
    		continue;
    }


    2、内联函数没有预留给它的单独代码块,所以无法获得内联函数的地址。

    3、内联函数不会在调试器中显示。比方上面的函数即使使用了gcc -g 选项进行了编译,通过gdb调试时,也不会有eatline函数。

    4、内联函数应该是比較短小。对于非常长的函数,调用函数的时间少于运行函数主体的时间;此时,使用内联函数不会节省多少时间。

    5、内联函数的定义和对该函数的调用必须在同一文件里,即内联函数具有内部链接。在多个文件程序中,每一个调用内联函数的文件都要对该函数进行定义。达到这个目标的简单方法为:在头文件里定义内联函数,并在使用该函数的文件里包括该头文件。

    6、与C++不同,C同意混合使用内联函数定义和外部函数定义。由于定义的内联函数仅仅能在本文件里使用,而定义的外部函数,却能够通过extern进行外部声明,在其它文件里使用。如:

    //file1.c
    inline double square(double);
    double square (double x) { return x * x; }
    //file2.c
    extern double square(double);
    double square (double x) { return x * x; }
    //file3.c
    extern double square(double);
    int main()
    {
    	double kw = square(w);
    }

    当中file1.c中使用的double函数时本文件里定义的内联函数,而在file2.c和file3.c中使用的double函数确实file2.c中定义的外部函数。





  • 相关阅读:
    阿里巴巴研究员叔同:云原生是企业数字创新的最短路径
    【OpenYurt 深度解析】边缘网关缓存能力的优雅实现
    K8s 原生 Serverless 实践:ASK 与 Knative
    一年增加 1.2w 星,Dapr 能否引领云原生中间件的未来?
    源码解读:KubeVela 是如何将 appfile 转换为 K8s 特定资源对象的
    绘本推荐
    油猴Tampermonkey
    lan蓝tern灯
    6岁叛逆期
    留白
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4034881.html
Copyright © 2020-2023  润新知