zoukankan      html  css  js  c++  java
  • 【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中定义的外部函数。





  • 相关阅读:
    父子进程 signal 出现 Interrupted system call 问题
    一个测试文章
    《淘宝客户端 for Android》项目实战 html webkit android css3
    Django 中的 ForeignKey ContentType GenericForeignKey 对应的数据库结构
    coreseek 出现段错误和Unigram dictionary load Error 新情况(Gentoo)
    一个 PAM dbus 例子
    漫画统计学 T分数
    解决 paramiko 安装问题 Unable to find vcvarsall.bat
    20141202
    js
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4034881.html
Copyright © 2011-2022 走看看