专栏首页诸葛青云的专栏嵌入式程序开发,C语言和C++究竟应该用哪个?
原创

嵌入式程序开发,C语言和C++究竟应该用哪个?

在嵌入式软件程序开发中,C语言无疑是最常被使用的程序语言。不过应该明白的是,有些嵌入式硬件同时提供C语言程序编译器以及C++程序编译器,而相比于C语言,C++的确具备很多非常好用的特性。

C++更好用?

C++更好用?

小明是一名嵌入式软件工程师,他擅长C语言和C++编程,现在需要在一款提供C++和C89编译器的4KB RAM 硬件设备上进行程序开发,他觉得C++有下面这些好用的特性:

C++支持inline函数,它比define宏定义安全许多。

C++支持命名空间(namespaces)。

C++因为有模板和很多类型转换,因此类型安全性比C语言好。

C++支持函数重载。

小明还有理由坚持只使用C89进行程序开发吗?

还有理由坚持只使用C89进行程序开发吗?

讨论

对于资源有限,比如RAM只有4KB的设备,我通常在正式开发C语言程序之前,会先写一些样例试水。天下没有免费的午餐,C++的一些好用特性其实是以牺牲性能为代价换来的,例如RTTI,动态类型转换,多重继承,多态以及异常处理都会带来一定的运行时开销。

另外,在嵌入式环境中,通常需要在硬件设备可以正常使用之前对其初始化,如果没有操作系统或者引导加载程序,这些初始化工作需要由程序员编写的程序完成。

应该明白的是,C++程序中的全局对象的构造函数是在 main() 之前运行的,因此在某些情况下,程序员将不得不修改本地的CRT0.S,以便在调用全局构造函数之前完成硬件的初始化。

在调用全局构造函数之前完成硬件的初始化

因此,如果希望使用C++方便的进行嵌入式程序开发,最好限制使用C++的一些开销较大的高级特效。但是使用C++进行C语言风格的程序开发,倒不如直接使用C语言了。

此外,使用C语言进行嵌入式程序开发更容易把控最终生成的指令,能够得到更精确的硬件控制,这对于资源匮乏的嵌入式设备来说是非常可贵的。尤其在RAM只有4KB的设备上开发程序,使用C++要小心很多细节,反而没有使用C语言方便了。

还有种情况需要考虑,就是很多嵌入式设备并不提供C++编译器,因此虽说大多数优秀的C语言程序员使用C++没有什么问题,但是相比较而言,他们(包括我)更了解C语言,知道每一行代码究竟会做哪些工作,以及开销如何,这对于开发使用更小开销实现更大效率的程序很有帮助。

使用更小开销实现更大效率

C语言语法比C++语法简单的多,也正因为如此,甚至很多程序员认为C语言是低级语言。正如前面所讨论的,C语言的每一行代码的意义都很明确,这使得C语言程序员把自己的精力主要花费在在硬件和构建良好的的和数据结构以及算法上,而复杂的C++则会让程序员花费大量时间挠头,想知道里面发生了什么,以及为什么不能在特定的环境和背景下做一些完全合理的事情,而只能服从编译器。

简单来说,C语言程序更加可控,而嵌入式程序员一般都是控制欲很强的性格,从这一层面考虑,C语言也更加适合嵌入式程序开发。

C语言也更加适合嵌入式程序开

小编给大家推荐一个学习氛围超好的地方,鼠标放到头像上就能看到

小结

简单来看,在嵌入式程序开发领域,C语言比C++更加合适主要有两个原因:

1. C语言程序更好预测其代码尺寸和开销,这对于RAM只有4KB的资源匮乏的嵌入式设备来说来很重要。

2. 大多数嵌入式程序员更了解C语言,因此为了促进同事间的协调性,更推荐使用大家都喜爱的程序语言。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • c++和c语言之间有什么区别

      C语言是一种古老而又经久不衰的计算机程序设计语言,大约诞生于上个世纪60年代。由于它的设计有很多优点,多年以来深受广大程序设计人员的喜爱,并逐渐 淘汰了很多...

    诸葛青云
  • 从每年的编程语言排行来看,为什么C/C++能稳居前五?

    从全局看,虽然C/C++每年在不断的衰退,但是C/C++任然位居前五而且增衰趋势逐渐趋于稳定,那么C/C++凭什么这么牛逼呢??

    诸葛青云
  • 为什么C++比C要麻烦?程序员这样回答,终于知道他为什么单身了

    同样衍生出来的还有一个小故事:情人节,有人看到C一个人喝酒,便问:你的好哥们C++、Java、Python他们呢?

    诸葛青云
  • C++程序员快要被市场淘汰了吗?

    从事C++语言开发已经十几个年头了,现在工作上也是一直在用着这种编程语言,虽然这个语言整体感觉难度不小,而且在入行前两年用起来很不爽,但随着时间推移每天不折腾几...

    程序员互动联盟
  • C++改变了世界,未来还要助力人工智能、大数据、机器学习的研发

    ? 编者按:尽管C++在大数据时代显得不温不火,既不像他的小师弟Java那么应用广泛,又不如后起之秀Python便捷,但在性能和效率方面仍然保持优势,不少桌面...

    小莹莹
  • C++核心准则边译边学-序言

    C++核心准则(C++ Core Guidelines)是由C++语言两位大神级的人物发表的有关C++语言编程的指导性文件,目前还处于不断修改和完善的过程中。从...

    面向对象思考
  • 这个世界本就是残酷的,所以你不能怪C++向你展示了世界的本质

    很多已经做了几年的C++程序员已经很自信觉得这门编程语言算是熟悉阶段了,但是当重新对这门语言来个彻底大扫除的时候发现,又有新的语法出现,最糟糕的是之前掌握的很多...

    诸葛青云
  • 记《C++那些事》上Github Trending及内容更新

    很多人都说C++很难,确实难,也比较底层,路线曲折,而《C++那些事》就是解决这样的问题,让初学者从0到1,知道后续如何去学,去学习什么知识,本人也是一...

    公众号guangcity
  • 一文看尽C++ 过去的这一年

    本文旨在让我们回顾 C++ 2019年里的变化和发展!我们将重点关注本年度里 C++ 上发生的重大事件,标准的发展,工具的变化等等……

    小白学视觉
  • C++的发展史

    为了让小伙伴们在学习过程中,能收获更多的知识,达到真正的零基础入门和深入了解C++,老九君特地收集了有关C++发展相关的一些资料供大家查阅和学习:

    老九学堂-小师弟

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动