当前位置: 首页 > news >正文 做外贸网站代理商wordpress 上一篇 下一篇 插件 news 2025/10/23 2:41:58 做外贸网站代理商,wordpress 上一篇 下一篇 插件,重庆网站开发设计公司,高州网站设计文章目录 前言1. 内联函数被创造出来的意义2. 内联函数的概念2.1 内联函数在代码中的体现2.2 普通函数和内联函数的汇编代码 3. 内联函数的特性#xff08;重点#xff09;4. 总结 前言 本章来聊一聊C的创作者本贾尼大佬#xff0c;为什么要创作出… 文章目录 前言1. 内联函数被创造出来的意义2. 内联函数的概念2.1 内联函数在代码中的体现2.2 普通函数和内联函数的汇编代码 3. 内联函数的特性重点4. 总结 前言 本章来聊一聊C的创作者本贾尼大佬为什么要创作出内联函数以及内联函数的定义和内联函数的实现机制等等。 话不多说让我们直入主题 1. 内联函数被创造出来的意义 请大家先看下面的代码 #includestdio.h int Add(int x, int y) {return xy; }int main() {int ret Add(10, 20);//假设下面有很多地方都要用到Add函数return 0; }假设Add函数在主函数中有非常多的地方要使用到我们的这种写法是最好的吗 其实我们这种写法并不好。从函数调用的效率来看每当我们调用一次函数就要在栈区上开辟一块空间用作函数栈帧等函数调用完之后栈帧就会被销毁。但是在栈区上开辟空间以及栈帧的销毁都是会浪费时间资源的更何况同一个函数调用很多次的情况。 那我们该怎么做呢有一个办法就是将这个函数以一种绕开编译器在调用函数时会开辟函数栈帧的做法——“宏函数”。 #includestdio.h //宏函数的写法 #define Add(x,y) ((x)(y))int main() {int ret Add(10, 20);//假设下面有很多地方都要用到Add函数return 0; }宏函数的工作原理就是在编译处于预处理阶段时就会在使用宏函数的地方将对应的代码给替换进去。这样就相当于只是一个代码段了而不是一个函数。 但是宏函数的写法实在是太容易出错了而且使用宏函数还有以下的缺点 代码的可读性差不方便调试复杂 了解了上述场景之后我们就来了解一下C的祖师爷是如何攻克这个难关的。 C的祖师爷也发现了这个问题于是他就创造出了一个函数内联函数这个函数能够完美的实现上述宏函数的功能和解决和宏函数的缺点。 2. 内联函数的概念 从形式上看以关键字inline开头的函数叫做内联函数。 从功能上看C编译器在调用内联函数的地方展开函数体对应的内容没有函数调用的消耗提高效率。 内联函数的写法 //在函数定义的开头加一个inline关键字 inline int Add(int x, int y) {return x y; }如果在上述的函数增加了inline关键字在编译期间编译器会用函数体替换函数的调用。 那我们该怎么查看这个现象呢可以通过查看汇编代码来判断 2.1 内联函数在代码中的体现 VS查看方式 在release模式下查看编译器生成的汇编代码中是否存在call Add。这种方法本人不推荐因为在release模式下代码不容易调试在debug模式下需要对编译器进行设置否则不会展开(因为debug模式下编译器默认不会对代码进行优化) 按我们就得更改一下Debug下的配置信息 第一步点击项目文件夹选择C/C,之后点击常规在调试信息格式中选择程序数据库模式。 第二步继续在C/C选项卡下选择优化在内联函数拓展这块选择只适用于__inline(/0b1) 2.2 普通函数和内联函数的汇编代码 (这里只是举个例子) 普通函数的汇编代码 内联函数的汇编代码 对比一下内联函数和普通函数的汇编代码的区别。可以看到的是对于普通函数的调用编译器是根据call指令来执行的。而对于内联函数来说C编译器则是直接将函数体里面的内容转换成汇编代码替换到了函数调用的地方。 3. 内联函数的特性重点 1. inline是一种以空间换时间的做法如果编译器将函数当成内联函数处理在编译阶段会用函数体替换函数调用缺陷可能会使目标文件变大优势 少了调用开销提高程序运行效率。 2. inline对于编译器而言只是一个建议不同编译器关于inline实现机制可能不同一般建议将函数规模较小(即函数不是很长具体没有准确的说法取决于编译器内部实现)、不是递归、且频繁调用的函数采用inline修饰否则编译器会忽略inline特性。 3. inline不建议声明和定义分离分离会导致链接错误。因为inline被展开就没有函数地址了链接就会找不到。 // F.h #include iostream using namespace std; inline void f(int i);// F.cpp #include F.h void f(int i) {cout i endl; } // main.cpp #include F.h int main() {f(10);return 0; } // 链接错误main.obj : error LNK2019: 无法解析的外部符号 void __cdecl //f(int) (?fYAXHZ)该符号在函数 _main 中被引用4. 总结 本文讲解了内联函数内联函数是否能够成功实现具体取决于编译器的做法我们只是给编译器提一个意见。还有一个重要的点是我们定义和声明内联函数时得两边都用inline否则因为inline的作用会使得函数的地址变成代替函数体的代码段的地址在链接阶段会因为找不到这个函数而报错 好了本文就讲到这里了。如果觉得本文好不错的话麻烦给偶点个赞吧 文章转载自: http://www.morning.gswfs.cn.gov.cn.gswfs.cn http://www.morning.ljglc.cn.gov.cn.ljglc.cn http://www.morning.xkwyk.cn.gov.cn.xkwyk.cn http://www.morning.wrlqr.cn.gov.cn.wrlqr.cn http://www.morning.rydbs.cn.gov.cn.rydbs.cn http://www.morning.kwhrq.cn.gov.cn.kwhrq.cn http://www.morning.cftkz.cn.gov.cn.cftkz.cn http://www.morning.cpctr.cn.gov.cn.cpctr.cn http://www.morning.fzlk.cn.gov.cn.fzlk.cn http://www.morning.dppfh.cn.gov.cn.dppfh.cn http://www.morning.xrpwk.cn.gov.cn.xrpwk.cn http://www.morning.rlcqx.cn.gov.cn.rlcqx.cn http://www.morning.dtnjr.cn.gov.cn.dtnjr.cn http://www.morning.beiyishengxin.cn.gov.cn.beiyishengxin.cn http://www.morning.nmkfy.cn.gov.cn.nmkfy.cn http://www.morning.znrgq.cn.gov.cn.znrgq.cn http://www.morning.fsnhz.cn.gov.cn.fsnhz.cn http://www.morning.bdgb.cn.gov.cn.bdgb.cn http://www.morning.dbphz.cn.gov.cn.dbphz.cn http://www.morning.mjqms.cn.gov.cn.mjqms.cn http://www.morning.rbrhj.cn.gov.cn.rbrhj.cn http://www.morning.qwfq.cn.gov.cn.qwfq.cn http://www.morning.yngtl.cn.gov.cn.yngtl.cn http://www.morning.tsqrc.cn.gov.cn.tsqrc.cn http://www.morning.mflqd.cn.gov.cn.mflqd.cn http://www.morning.xxwfq.cn.gov.cn.xxwfq.cn http://www.morning.qblcm.cn.gov.cn.qblcm.cn http://www.morning.wfykn.cn.gov.cn.wfykn.cn http://www.morning.bzfld.cn.gov.cn.bzfld.cn http://www.morning.ylqb8.cn.gov.cn.ylqb8.cn http://www.morning.psxxp.cn.gov.cn.psxxp.cn http://www.morning.gcftl.cn.gov.cn.gcftl.cn http://www.morning.pbbzn.cn.gov.cn.pbbzn.cn http://www.morning.yfmwg.cn.gov.cn.yfmwg.cn http://www.morning.yrrnx.cn.gov.cn.yrrnx.cn http://www.morning.zpfqh.cn.gov.cn.zpfqh.cn http://www.morning.brfxt.cn.gov.cn.brfxt.cn http://www.morning.lsqxh.cn.gov.cn.lsqxh.cn http://www.morning.rlhjg.cn.gov.cn.rlhjg.cn http://www.morning.qnpyz.cn.gov.cn.qnpyz.cn http://www.morning.xinyishufa.cn.gov.cn.xinyishufa.cn http://www.morning.qnbgk.cn.gov.cn.qnbgk.cn http://www.morning.wkrkb.cn.gov.cn.wkrkb.cn http://www.morning.fcwxs.cn.gov.cn.fcwxs.cn http://www.morning.mfbcs.cn.gov.cn.mfbcs.cn http://www.morning.rfhwc.cn.gov.cn.rfhwc.cn http://www.morning.ygrkg.cn.gov.cn.ygrkg.cn http://www.morning.nrtpb.cn.gov.cn.nrtpb.cn http://www.morning.lgrkr.cn.gov.cn.lgrkr.cn http://www.morning.mdtfh.cn.gov.cn.mdtfh.cn http://www.morning.rhchr.cn.gov.cn.rhchr.cn http://www.morning.fzqfb.cn.gov.cn.fzqfb.cn http://www.morning.rdbj.cn.gov.cn.rdbj.cn http://www.morning.ltrms.cn.gov.cn.ltrms.cn http://www.morning.pwhjr.cn.gov.cn.pwhjr.cn http://www.morning.rknjx.cn.gov.cn.rknjx.cn http://www.morning.smszt.com.gov.cn.smszt.com http://www.morning.gkfwp.cn.gov.cn.gkfwp.cn http://www.morning.kzxlc.cn.gov.cn.kzxlc.cn http://www.morning.tsynj.cn.gov.cn.tsynj.cn http://www.morning.hhkzl.cn.gov.cn.hhkzl.cn http://www.morning.nbgfk.cn.gov.cn.nbgfk.cn http://www.morning.hyhzt.cn.gov.cn.hyhzt.cn http://www.morning.nlrxh.cn.gov.cn.nlrxh.cn http://www.morning.lgsfb.cn.gov.cn.lgsfb.cn http://www.morning.fplqh.cn.gov.cn.fplqh.cn http://www.morning.ryqsq.cn.gov.cn.ryqsq.cn http://www.morning.swdnr.cn.gov.cn.swdnr.cn http://www.morning.wwxg.cn.gov.cn.wwxg.cn http://www.morning.hjlsll.com.gov.cn.hjlsll.com http://www.morning.hjjfp.cn.gov.cn.hjjfp.cn http://www.morning.hfbtt.cn.gov.cn.hfbtt.cn http://www.morning.gbnsq.cn.gov.cn.gbnsq.cn http://www.morning.oumong.com.gov.cn.oumong.com http://www.morning.xdjwh.cn.gov.cn.xdjwh.cn http://www.morning.tkryt.cn.gov.cn.tkryt.cn http://www.morning.fprll.cn.gov.cn.fprll.cn http://www.morning.rzbcz.cn.gov.cn.rzbcz.cn http://www.morning.qttft.cn.gov.cn.qttft.cn http://www.morning.sgrwd.cn.gov.cn.sgrwd.cn 查看全文 http://www.tj-hxxt.cn/news/241343.html 相关文章: 阿里云服务器的网站备案流程图网页制作培训班培训 自助网站制作系统源码宣传片制作公司业务 网站的图片大小wordpress php注释 格子三合一交友婚恋网站模板响应式博客网站模板 发卡网站搭建教程网站开发与服务合同范本 南昌有哪些企业网站传统企业如何做好网络推广 网站加强队伍建设wordpress 获取作者id 成品网站和模板建站网站开发 职位晋升路线 字体排版设计网站在线药店网站建设 传统网站和手机网站的区别是什么网站开发质保 网站seo服务没钱可以注册50万的公司吗 jsp网站开发介绍typecho移植wordpress 深圳购物商城网站建设wordpress 找回密码邮件错误 网站服务器租用一年多少钱啊做图片视频的网站有哪些问题吗 兰州网站seo服务重庆营销型网站建设 女人和男人做床上爱网站重庆优化官网服务 网络教学平台的功能谷歌seo新规则 网站的文字被爬取了友汇网站建设一般多少钱 网站建设及维护机logo设计网站哪个好一些 网站语言是什么盘锦市建设银行网站 哈尔滨开发网站城乡建设部网站第35号令 做门户网站的公司化妆品网站栏目设计 做网站全部乱码怎么办昆明网站网站建设 引用网站资料怎么注明大安网站建设 和目网站wordpress 带用户中心 上海营销型网站建设费用职业培训机构有哪些 网站建设邀标比选网络开发与维护是做什么的 爱做网站濮阳佳杰网站建设巧用不对称 毕业室内设计代做网站哪里网站建设联系方式 苏中建设集团网站官网郴州今天几例