精华内容
下载资源
问答
  • 文章(一)内联函数与宏定义 在C中,常用预处理语句#define来代替一个函数定义。例如: #define MAX(a,b) ((a)>(b)?(a):(b)) 该语句使得程序中每个出现MAX(a,b)函数调用的地方都被宏定义中后面的表达式((a)>(b)?...
  • 内联函数与宏定义

    2021-05-18 10:10:30
    内联函数与宏定义 一、宏定义内联函数的区别 宏定义不是函数,但是使用起来像函数。预处理器用复制宏代码的方式代替函数的调用,省去了函数压栈退栈过程,提高了效率。 内联函数本质上是一个函数,内联函数一般...

    内联函数与宏定义
    一、宏定义和内联函数的区别

    1. 宏定义不是函数,但是使用起来像函数。预处理器用复制宏代码的方式代替函数的调用,省去了函数压栈退栈过程,提高了效率。

      内联函数本质上是一个函数,内联函数一般用于函数体的代码比较简单的函数,不能包含复杂的控制语句,while、switch,并且内联函数本身不能直接调用自身。如果内联函数的函数体过大,编译器会自动的把这个内联函数变成普通函数。

    2. 宏定义是在预编译的时候把所有的宏名用宏体来替换,简单的说就是字符串替换

      内联函数则是在编译的时候进行代码插入,编译器会在每处调用内联函数的地方直接把内联函数的内容展开,这样可以省去函数的调用的开销,提高效率

    3. 宏定义是没有类型检查的,无论对还是错都是直接替换

      内联函数在编译的时候会进行类型的检查,内联函数满足函数的性质,比如有返回值、参数列表等

    4. 宏定义和内联函数使用的时候都是进行代码展开。不同的是宏定义是在预编译的时候把所有的宏名替换,内联函数则是在编译阶段把所有调用内联函数的地方把内联函数插入。这样可以省去函数压栈退栈,提高了效率

    二、内联函数和普通函数的区别

    1. 内联函数和普通函数的参数传递机制相同,但是编译器会在每处调用内联函数的地方将内联函数内容展开,这样既避免了函数调用的开销又没有宏机制的缺陷

    2. 普通函数在被调用的时候,系统首先要到函数的入口地址去执行函数体,执行完成之后再回到函数调用的地方继续执行,函数始终只有一个复制。

      内联函数不需要寻址,当执行到内联函数的时候,将此函数展开,如果程序中有N次调用了内联函数则会有N次展开函数代码

    3. 内联函数有一定的限制,内联函数体要求代码简单,不能包含复杂的结构控制语句。如果内联函数函数体过于复杂,编译器将自动把内联函数当成普通函数来执行

    展开全文
  • 内联函数宏定义根本的区别在于宏定义仅仅只是字符串替换,而内联函数是个函数,具有函数基本性质,因此内联函数可以向普通函数一样调试,而宏定义不能。内联函数宏定义的代码展开发生在程序执行的不同阶段,...

    • 内联函数和宏定义都是能够节省频繁的函数调用过程中所产生的时间和空间的开销,提高程序执行的效率,二者的目的是相同的。内联函数和宏定义都是通过将函数调用替换成完整的函数体,二者的实现也是类似的。
    • 内联函数和宏定义根本的区别在于宏定义仅仅只是字符串替换,而内联函数是个函数,具有函数基本性质,因此内联函数可以向普通函数一样调试,而宏定义不能。
    • 内联函数和宏定义的代码展开发生在程序执行的不同阶段,宏定义的展开是在预处理阶段,而内联函数的展开是在编译阶段,因此许多编译阶段的工作只对内联函数有效,例如类型安全检查和自动类型转换。
    • 内联函数作为类的成员函数时,可以访问类的所有成员,包括共有成员、保护成员、私有成员,而this指针也会被隐式地正确使用,而宏定义无法实现这些功能。
    展开全文
  • 内联函数宏定义更加的安全,因为前者进行参数检查,而后者仅仅是简单地文本替换。 内联函数宏定义的区别 宏定义是在预处理阶段进行的文本替换。 内联函数是在编译阶段进行的替换,优点是减少调用过程,缺点是...

    内联函数的优点

    内联函数比宏定义更加的安全,因为前者进行参数检查,而后者仅仅是简单地文本替换。

    内联函数和宏定义的区别

    1. 宏定义是在预处理阶段进行的文本替换。
    2. 内联函数是在编译阶段进行的替换,优点是减少调用过程,缺点是使代码膨胀。

     

    (SAW:Game Over!)

    展开全文
  • 内联函数宏定义函数的区别

    千次阅读 2019-05-17 19:53:55
    1、不同点: 内联函数是在编译时展开,而宏在预编译时展开;在编译的时候,内联函数直接被嵌入到目标代码中去,而宏只是一个简单的文本替换。 ... inline有点类似于宏定义,但是它和宏定义不同...

    1、不同点:

    • 内联函数是在编译时展开,而宏在预编译时展开;在编译的时候,内联函数直接被嵌入到目标代码中去,而宏只是一个简单的文本替换。
    • 内联函数可以进行诸如类型安全检查、语句是否正确等编译功能,宏不具有这样的功能;宏不是函数,而inline是函数。
    • 宏在定义时要小心处理宏参数,一般用括号括起来,否则容易出现二义性。而内联函数不会出现二义性。
    • inline有点类似于宏定义,但是它和宏定义不同的是,宏定义只是简单的文本替换,是在预编译阶段进行的。而inline的引入正是为了取消这种复杂的宏定义的。

    2、举例:

    • 宏定义:
    #define MAX(a,b) ((a)>(b)?(a):(b))
    MAX(a,"Hello"); //错误地比较int和字符串,没有参数类型检查
    • 内联函数:
    #include <stdio.h>
     
    inline int add(int a, int b)
    {
        return (a + b);
    }
    
    int main(void)
    {
        int a;
    
        a = add(1, 2);
        printf("a+b=%d\n", a);
    
        return 0;
    }
    以上a = add(1, 2);处在编译时将被展开为:
    a = (a + b);

    3、使用时的一些注意事项:

    • 使用宏定义一定要注意错误情况的出现,比如宏定义函数没有类型检查,可能传进来任意类型,从而带来错误,如举例。还有就是括号的使用,宏在定义时要小心处理宏参数,一般用括号括起来,否则容易出现二义性
    • inline函数一般用于比较小的,频繁调用的函数,这样可以减少函数调用带来的开销。只需要在函数返回类型前加上关键字inline,即可将函数指定为inline函数。
    • 同其它函数不同的是,最好将inline函数定义在头文件,而不仅仅是声明,因为编译器在处理inline函数时,需要在调用点内联展开该函数,所以仅需要函数声明是不够的。

    4、内联函数使用的条件:

    • 内联是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率 的收获会很少。另一方面,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。以下情况不宜使用内联: 
    • (1)如果函数体内的代码比较长,使用内联将导致内存消耗代价较高。 
    • (2)如果函数体内出现循环,那么执行函数体内代码的时间要比函数调用的开销大。 
    • 内联不是什么时候都能展开的,一个好的编译器将会根据函数的定义体,自动地取消不符合要求的内联。

    5、使用内联函数和宏函数可能带来的问题(慎用):

    • 有时不要仅是为了提高编程效率而使用这两种函数,要综合考虑后再使用,因为有时使用这两种函数可能带来其他的问题,比如出现问题不能使用gdb调试问题,内联函数不展开,宏函数没有参数检测等

     

     

    展开全文
  • 内联函数与宏定义的函数很相似,都是在运行前,先将一些简短的函数,直接替换为实现代码,以此来省去函数调用时,参数入栈、程序跳转等的时间开支。 宏定义的函数: 使用宏定义#define定义的函数。其在预编译阶段就...
  • 内联函数与宏定义的区别 内联函数在运行时可调试,而宏定义不可以; 编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会; 内联函数可以访问类的成员变量,宏定义则不能; ...
  • 宏定义是要先通过预处理的,优点是消耗内存小(比起栈方法调用函数宏定义是直接插入),缺点是宏定义的预处理只是简单地文本置换(可能会出现如下代码的问题)。 #include <iostream> #defin...
  • C++内联函数与宏定义

    2014-07-12 10:41:27
    用内联取代宏: 1.内联可调试; 2.可进行类型安全检查或...内联函数与宏定义  在C中,常用预处理语句#define来代替一个函数定义。例如:  #define MAX(a,b) ((a)>(b)?(a):(b))  该语句使得程序中每个出现
  • 内联函数与宏函数的区别

    千次阅读 2018-08-07 22:04:20
    内联函数 概念 以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,内联函数提升程序运行的效率 特性 inline是一种以空间换时间的做法,省去调用函...
  • 下面详细介绍一下探讨一下内联函数与宏定义。一、内联函数是什么?内联函数是代码被插入到调用者代码处的函数。如同 #define 宏(但并不等同,原因见下文),内联函数通过避免被调用的开销来提高执行效率,尤其是它...
  • 宏定义内联函数区别

    千次阅读 2018-01-31 14:59:42
    宏定义内联函数区别  内联函数是代码被插入到调用者代码处的函数。如同 #define 宏,内联函数通过避免被调用的开销来提高执行效率,尤其是它能够通过调用(“过程化集成”)被编译器优化。 宏定义不检查函数参数...
  • 内联函数VS宏定义相同点: (1)二者都是通过将函数调用替换成完整的函数体,相比函数调用的时间、空间开销而言,二者提高了效率。 不同点: (1)宏定义不是函数,而内联函数时函数,因此内联函数可以调试,宏定义不能...
  • 内联函数需要做类型检查,这是相比的一个优势。 是在代码处不加任何验证的简单替代,而内联函数是将代码直接插入调用处,而减少了普通函数调用时的资源消耗。 不是函数,只是在预处理时将程序中有关...
  • 宏定义内联函数的区别

    千次阅读 2019-03-08 22:10:19
    一、宏定义内联函数的区别 1. 宏定义不是函数,但是使用起来像函数。预处理器用复制宏代码的方式代替函数的调用,省去了函数压栈退栈过程,提高了效率。 内联函数本质上是一个函数,内联函数一般用于函数体的...
  • 内联函数的优越性:一:inline定义的类的内联函数,函数的代码被放入符号表中,在使用时直接进行替换(像宏定义一样展开),没有了调用的开销,效率很高。二:类的内敛函数是一个真正的函数。三:使用内联函数inline...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,690
精华内容 9,076
关键字:

内联函数与宏定义