内联函数与宏的区别

产生:

内联函数(有时称作在线函数或编译时期展开函数)是一种编程语言结构,用来建议编译器对一些特殊函数进行内联扩展;也就是说建议编译器将指定的函数体插入并取代每一处调用该函数的地方(上下文),从而节省了每次调用函数带来的额外时间开支。但在选择使用内联函数时,必须在程序占用空间和程序执行效率之间进行权衡,因为过多的比较复杂的函数进行内联扩展将带来很大的存储资源开支。

比较:

(1)宏调用并不执行类型检查,甚至连正常参数也不检查,但是函数调用却要检查。

(2)C语言的宏使用的是文本替换,可能导致无法预料的后果,因为需要重新计算参数和操作顺序。

(3)在宏中的编译错误很难发现,因为它们引用的是扩展的代码,而不是程序员键入的。

(4)许多结构体使用宏或者使用不同的语法来表达很难理解。内联函数使用与普通函数相同的语言,可以随意的内联和不内联。

(5)内联代码的调试信息通常比扩展的宏代码更有用。

内联函数的缺点:

(1)通常,编译器比程序设计者更清楚对于一个特定的函数是否合适进行内联扩展;一些情况下,对于程序员指定的某些内联函数,编译器可能更倾向于不使用内联甚至根本无法完成内联。

(2)对于一些开发中的函数,它们可能从原来的不适合内联扩展变得适合或者倒过来。尽管内联函数或者非内联函数的转换易于宏的转换,但增加的维护开支还是使得它的优点显得更不突出了。

(3)对于基于C的编译系统,内联函数的使用可能大大增加编译时间,因为每个调用该函数的地方都需要替换成函数体,代码量的增加也同时带来了潜在的编译时间的增加。

宏的缺点:

1. 由于是直接插入的,代码量会增加。

2. 嵌套定义过多可能会影响程序的可读性,而且很容易出错。

3. 对带参的宏而言,由于是直接替换,不会检查参数,存在安全隐患。

时间: 2024-08-11 03:29:44

内联函数与宏的区别的相关文章

内联函数与宏定义的区别

内联函数与宏的区别: 内联函数与普通函数相比,可以加快程序的运行速度,因为不需要中断调用,在编译的时候内联函数可以直接镶嵌到目标代码中.而宏只是简单的字符替换. 内联函数要做参数类型检查,这是内联函数跟宏相比的优势. inline一般只用于如下情况: (1)一个函数不断被重复调用 (2)函数只有简单的几行,且不包含for.while.switch等语句. 一般而言,写小程序没有必要使用inline,但是如果要完成一个工程项目,当一个简单函数被调用多次时,应考虑使用inline

深入探讨 内联函数和宏定义的区别

内联函数的执行过程与带参数宏定义很相似,但参数的处理不同.带参数的宏定义并不对参数进行运算,而是直接替换:内联函数首先是函数,这就意味着函数的很多性质都适用于内联函数,即内联函数先把参数表达式进行运算求值,然后把表达式的值传递给形式参数. 内联函数与带参数宏定义的另一个区别是,内联函数的参数类型和返回值类型在声明中都有明确的指定:而带参数宏定义的参数没有类型的概念,只有在宏展开以后,才由编译器检查语法,这就存在很多的安全隐患. 使用内联函数时,应注意以下问题: 1)内联函数的定义性声明应该出现在

内联函数与宏

宏,我们有时会定义一些预处理宏,如 #define COMP(x) ((x)>0?(x):0) 就定义了一个宏. 使用宏的原因是——函数调用有一定的时间和空间开销(在函数调用的使用程序跳到函数所在内存中的地址,执行完之后再跳回原来的位置继续执行.这种转移需要保存现场并记忆当前内存位置,执行完函数之后再恢复现场),而宏只是在预处理的地方把代码展开,不需要额外的时间空间开销,因而提高了效率. 内联函数,使用Inline来定义,在类的内部定义了函数体的函数被默认为内联函数. 内联函数在C++类中,应用

内联函数和宏定义的区别和联系

深入到计算机的本质,其实,很多东西还是细节需要深入分析的,比如我最近的一份工作 内联函数和宏很类似,都是以空间换时间,都能一定程度上加快程序的执行.而区别在于,宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的.而且内联函数是真正的函数,只是在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销.你可以象调用函数一样来调用内联函数,而不必担心会产生于处理宏的一些问题.当然,内联函数也有一定的局限性.就是函数中的执行代码不能太多了,如果,内联函数的函数体过

C++内联函数、宏定义和普通函数的区别

C++内联函数.宏定义和普通函数的区别? 宏定义:在预处理阶段进行简单的文本替换,不会进行参数类型检查: 内联函数:在编译器的时候进行代码插入,编译器会在每次调用内联函数的地方直接将内联函数的内容展开,这样可以省去函数压栈和出站的开销提高效率.会进行参数                  类型检查: 普通函数:在函数调用时,跳转到函数地址执行代码: 原文地址:https://www.cnblogs.com/dingou/p/10549225.html

内联函数和宏定义的区别

内联函数和宏定义的差别是什么 版权声明:本文为博主原创文章,未经博主允许不得转载.

内联函数和宏定义

内联函数的优点? 内联函数和普通函数相比可以加快程序运行的速度,因为不需要中断调用. inline是指嵌入代码,就是在调用函数的地方不是跳转,而是把代码直接写到那里去, 减少了普通函数调用时的消耗. 什么时候使用inline函数? 一个函数不断被重复调用. 函数只有简单的几行,且函数内不包含for.while.switch语句. 以下情况不宜使用内联: 函数体的代码比较长. 函数体内出现循环. 类的构造函数和析构函数. 内联函数和宏的共同点是什么? 空间换时间 内联函数和宏定义的差别是什么? 宏

内联函数和宏

内联函数是为了提高程序运行速度的一种改进. 当程序运行时,有时候需要重复调用一个函数,但是因为重复调用这个函数,会不断的造成函数调用, 会不断进栈出栈造成cpu的消耗. 而内联函数是在编译时就将这个函数边入进去,不用再进行地址的跳转.但是不可避免的产生了一些 内存的消耗,所有有时候用户在申请内联时,内联函数过于大,编译器不会进行允许 例如: #include<iostream> #include<ctime> #include<windows.h> using name

内联函数和宏比较

函数内联用内联取代宏代码----------------C++ 语言支持函数内联,其目的是为了提高函数的执行效率(速度).在C程序中,可以用宏代码提高执行效率.宏代码本身不是函数,但使用起来象函数.预处理器用复制宏代码的方式代替函数调用,省去了参数压栈.生成汇编语言的CALL调用.返回参数.执行return等过程,从而提高了速度. 使用宏代码最大的缺点是容易出错,预处理器在复制宏代码时常常产生意想不到的边际效应. 对于C++ 而言,使用宏代码还有另一种缺点:无法操作类的私有数据成员. 让我们看看