您的位置:首页 > 房产 > 建筑 > 科技龙头股一览表_太原在建_推广软文范例_搜索排名广告营销怎么做

科技龙头股一览表_太原在建_推广软文范例_搜索排名广告营销怎么做

2025/3/10 12:46:15 来源:https://blog.csdn.net/qq_75000174/article/details/142845127  浏览:    关键词:科技龙头股一览表_太原在建_推广软文范例_搜索排名广告营销怎么做
科技龙头股一览表_太原在建_推广软文范例_搜索排名广告营销怎么做

大家好,我是苏貝,本篇博客带大家了解C++的内联函数,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️
在这里插入图片描述


目录

  • 一. 宏函数
  • 二. 内联函数
    • 1 概念
    • 2 特性

一. 宏函数

在C语言中,如果我们要频繁地调用某个函数10万次,那就要建立10万个栈帧再销毁10万个栈帧,这就太影响效率了。那C语言是怎么解决这一个问题的?用宏函数,它只是替换,不需要建立栈帧

宏函数怎么实现呢?下面这些吗
在这里插入图片描述

这些都是错的,原因:

  1. 宏函数不是函数,它只是替换,所以不需要写参数的类型和return
  2. 宏函数是替换,所以不需要分号
  3. 注意括号控制优先级

核心点:宏是预处理阶段进行替换

因此,宏函数的正确写法:
在这里插入图片描述

为什么a和b还要单独加括号?因为它们可能是表达式,如a为x|y,b为x&y。

在这里插入图片描述
在这里插入图片描述

宏的缺点:

  1. 语法复杂,坑很多
  2. 不能调试
  3. 没有类型安全的检查,比如要传int类型的参数,结果传double类型

二. 内联函数

宏函数是C语言解决频繁调用函数导致为某个函数多次建立栈帧的方法,C++则是用内联函数解决

1 概念

以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,可提升程序运行的效率。

如果在下述函数前增加inline关键字将其改成内联函数,在编译期间编译器会用函数体替换函数的调用。
在这里插入图片描述

查看inline后汇编代码的方法:

  1. 在release模式下,查看编译器生成的汇编代码中是否存在call Add
  2. 在debug模式下,需要对编译器进行设置,否则不会展开(因为debug模式下,编译器默认不会对代码进行优化,以下给出vs2013的设置方式)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2 特性

  1. inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用,缺陷:可能会使生成的可执行文件变大,优势:少了调用开销,提高程序运行效率。

  2. inline对于编译器而言只是一个建议,不同编译器关于inline实现机制可能不同,一般建 议:将函数规模较小(即函数不是很长,具体没有准确的说法,取决于编译器内部实现)、不是递归、且频繁调用的函数采用inline修饰,否则编译器会忽略inline特性。下图为 《C++prime》第五版关于inline的建议:
    在这里插入图片描述

  3. inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址了,链接就会找不到。


好了,那么本篇博客就到此结束了,如果你觉得本篇博客对你有些帮助,可以给个大大的赞👍吗,感谢看到这里,我们下篇博客见❤️

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com