// Possible autogenerated functionvoid autogeneratedStackUnwindingFor_myFunction(int checkpoint){switch (checkpoint){// case 1 and 9: do nothing;case 3: b.~B(); goto destroyA;// jumps to location of destroyA labelcase 6: c.~C();// also goes to destroyA as that is the next linedestroyA:// labelcase 2: case 4: case 5: case 7: case 8: a.~A();}}
如果从case 1和9抛出异常,则没有对象需要销毁 。对于case 3,则b和a必须被销毁 。对于case 6,c和a必须被销毁 。在所有情况下,销毁顺序必须得到尊重 。对于检查点2、4、5、7和8,只有对象a需要被销毁 。
这个辅助函数增加了代码的体积 。这是C++添加到C语言中的空间开销的一部分 。许多嵌入式应用无法负担这种额外的空间 。因此,用于嵌入式系统的C++编译器通常有一个禁用异常的标志 。在C++中禁用异常是不自由的,因为标准模板库严重依赖异常来告知错误 。使用这种修改过的方案,没有异常,需要对C++开发人员进行更多的培训,以检测可能的问题或发现错误 。
C++的一个原则就是“开发者无需为不使用的东西付费” 。对于其他语言来说,二进制体积的增加会变得非常糟糕,通过其它功能来增加额外开销,虽然这些功能有用,但嵌入式系统却负担不起 。虽然C语言不会给你提供这些额外功能,但他可以比其它语言拥有更紧凑的代码足迹(code footprint ),占用更小的磁盘空间 。
为什么要学习C语言
C语言并不难学,作为一门老牌编程语言,有关它的教程跟学习资料非常多,那么学习C语言有哪些好处呢?
C语言是开发人员的通用语言,网上或者图书里面的不少算法都是基于C语言实现,这也为实现提供了最大的可移植性,开发者也会从中受益 。
Understand the machine(用C语言思考)当我们与同事讨论代码的某些部分或其他语言的某些特征时,我们最终会 "用C语言说话":"这部分是向对象传递一个 "指针 "还是复制整个对象?这里会不会发生任何 "转换"?等等 。
在分析高级语言的一部分代码的行为时,我们很少讨论(或思考)一部分代码正在执行的汇编指令 。相反,在讨论机器在做什么时,我们可以用C语言描述(或想)得很清楚 。
文章插图
在许多有趣的C语言项目上工作从大型数据库服务器或操作系统内核甚至是为了满足个人乐趣而制作的小型家用嵌入式应用,你都可以用C语言实现,并且还可以在网上找到相关Demo 。Daniel呼吁大家,不要停止自己喜欢做的事情,比如学习C语言,它古老但小巧,并且是一门经过时间验证的编程语言 。
当下许多编程语言在其预设的用途上都要优于C语言,但这并不意味着就能击败C,当考虑性能优先的时候,C依然是王者 。世界正运行在C语言驱动的设备上,无论你是否意识到,你使用的诸多设备的的确确都用到了C语言 。
推荐阅读
- 一门备受争议却又曾风靡学术界的编程语言
- Win10系统分了几个版本?怎么选择?哪个更好用?
- Anaconda环境及Python语言的下载与安装方法
- vlog是什么意思?怎么读?
- 眼肌无力是怎么引起的
- 脑梗语言康复训练方法
- 老人干咳嗽老不好怎么办
- 老人呕吐不止怎么办
- 老人家打嗝是怎么回事
- 老年人体温晚上高是怎么回事?