CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛

C++学习大纲:宏与内联函数-永久免费的源码丞旭猿

C++ 宏与内联函数

因为函数调用需要开销(如:保护调用者的运行环境、参数传递、执行调用指令等),所以函数调用会带来程序执行效率的下降,特别是对一些小函数的频繁调用将是程序的效率有很大的降低。

C++提出了两种解决方法:宏、内联函数。

1. 宏

宏是C++编译预处理系统处理的实体。

宏定义的4种格式:

1)define <宏名> <文字串>

在编译前进行使用文字串进行宏替换

define PI 3.14

2)define <宏名>(<参数表>) <文字串>

在编译前进行使用文字串进行宏替换

define max(a,b) a>b?a:b

3)define <宏名>

只是告诉编译程序该宏名已经被定义,不做任何文字串替换,其用于条件编译

如:define OUTPUTFILE

ifdef OUTPUTFILE

//输出到文件的代码

endif

4)undef <宏名>

用于取消宏名的编译

不足:1)重复计算,如max((x+1),(y+2)),因为其只是进行单纯的文字替换

2)不进行参数类型检查和转换

3)不利于一些工具对程序的处理(如C++程序编译后,所有宏都不存在了)

2. 内联函数

在函数定义中的返回值类型之前加上一个关键字 inline

其作用是建议(具体有没有不一定,有些函数加上也不会作为内联函数对待,如递归函数)编译程序把该函数的函数体展开到调用点,这样就避免了函数调用的开销,从而提高了函数调用的效率。

inline int max(int a,int b)

{return a>b?a:b;}

注意:内联函数名具有文件作用域。

————————————————

内联函数和宏函数的优缺点

内联函数:

内联函数是C++为提高程序运行速度进行的改进,是一种以空间换时间的做法。

内联函数与常规函数

常规函数

运行程序时,常规函数调用会使程序跳到另一个地址(函数地址),并在函数结束时返回。

详细过程:执行到函数调用指令时,程序将在函数调用后立即存储该指令的内存地址,并将函数参数复制到堆栈(为此保留的内存块),跳到标记函数起点的内存单元,执行函数代码(也许还需要将返回值放入寄存器中),然后跳回到地址被保存的指令处。来回跳跃并记录跳跃位置意味着以前使用函数时,需要一定的开销。

内联函数

内联函数的编译代码与其他程序代码内联起来了。也就是说,编译器将使用相应的函数代码替换函数调用。

对于内联函数,程序无需跳到另一个位置处执行代码,再跳回来。因此,内联函数的运行速度比常规函数快,但代价是需要占用更多的内存。

在使用内联函数时,如果调用函数的时间比处理函数的时间长,节省的时间占大头。但如果调用时间小于处理函数的时间短,则没有必要使用内联函数。

要使用内联函数的特性:

需要在函数前加上关键字inline,但inline是建议性关键字,当请求将函数作为内联函数时,编译器并不一定会满足这种要求。内联函数尽量避免函数体过长、含有循环、递归。

内联与宏

内联函数的优势在于做参数类型检查,而宏定义不会,宏只是简单的文本替换。

define SQUARE(X) X*X

1.a = SQUARE(5.0); // a = 5.0 * 5.0

2.b = SQUARE(4.3 + 3.1); // 4.3 + 3.1 * 4.3 + 3.1

3.c = SQUARE(d++) // c == d++ * d++ d递增两次

宏定义时不能忘记括号的使用,否则会造成运算错误。但是上述代码中,加上括号仍然会出现错误,在第三个函数中,d依旧递增两次。如果使用内联函数,则是计算出 d 的值在进行传递,并进行运算,就只会递增一次。

————————————————

通过分享实用的计算机编程语言干货,推动中国编程到2025年基本实现普及化,使编程变得全民皆知,最终实现中国编程之崛起,这里是中国编程2025,感谢大家的支持。

原文链接:https://blog.csdn.net/haitaolang/article/details/69945338

原文链接:https://blog.csdn.net/qq_37934101/article/details/81266548

声明:本文部分素材转载自互联网,如有侵权立即删除 。

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
相关推荐
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容