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*X1.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赞赏 分享
相关推荐
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容