从C到C++过渡的3个原因

3 reasons to transition from C to C++

几十年来,嵌入式软件工程师们一直在争论他们是否应该使用C或C++。根据2019年嵌入式市场调查,微控制器制造商提供的软件大部分是用C语言提供的,事实上,56%的嵌入式软件是用C语言编写的。然而,C++已经逐渐普及,大约23%的新嵌入式软件项目都是用C++编写的。随着C接近第五十周年,现在可能是开始从C到C++的过渡时间了。以下是开发人员应该考虑进行更改的三个原因。

原因1:改进架构实现

C编程语言确实通过函数指针为开发人员提供了封装和一些基本的多态性功能。然而,C实际上是一种过程语言,不需要额外的努力就不能提供诸如继承或组合之类的机制。这会使系统的总体架构设计不太理想,从而影响软件的重用和维护方式,甚至限制其灵活性。
C++为开发人员提供了实现真正面向对象设计模式的能力,开发了真正的抽象,并实现了设计模式,这些模式不仅可以从一个应用程序重用到下一个应用程序,而且还可以提高架构的灵活性。这使得软件可以重用,这反过来又可以加快产品开发速度,缩短客户机应用程序的定制时间等诸多优点。

原因2:C++是一种不断发展的现代语言

在当今复杂和创新的开发环境中,开发人员不仅需要尖端的硬件解决方案,还需要尖端的软件和语言解决方案。这意味着用于编写软件的语言必须是最新的,以向开发人员提供实现其系统所需的最新工具。最近一次对C语言的更新是在2018年,这听起来好像是最近更新的。但是,如果你看看这个标准,没有添加新的功能,唯一的变化是修复了2011年发布的前一个版本的问题!是的,它花了七年的时间才制定出一个修正后的标准,修正了上一个标准中的问题!

看C++,标准委员会承诺每三年更新一次标准!下一次修订预计在今年,即2020年,最新版本将于2017年发布。与C不同的是,新的修订不仅仅是错误修复,而是为语言添加了新的特性和功能,这样它就可以是最新的,并提供了与其他语言(如Python)竞争所需的工具。新标准甚至删除了不推荐使用的功能,如三元组。

原因3:C++是一种更丰富的语言

我为微控制器编写的大多数嵌入式软件直到3-4年前才使用C编程语言。C++总是提供比C更丰富的特征集,但在那个时候编译器似乎已经达到编译代码是等效的或更好的点。那时我开始潜心学习C++语言,发现语言变得多么丰富,还有更多的东西让我学习语言。

C++允许开发人员利用诸如

模板–允许独立于任何特定类型编写代码

动态多态性–允许在运行时分配实现

异常处理——捕捉错误(对于任何C开发人员来说都是令人震惊的)

编译时静态if语句

虚函数

这些只是几个例子,还有更多!所有这些工具使嵌入式系统的生活编程变得更容易。

结论

C++是一种现代的、进化的语言,C语言看起来是静态的,进化得慢得多。事实上,在编程语言快速发展的时代,C正在成为众所周知的恐龙。随着开发人员在他们的系统中面临越来越复杂的问题,他们需要一种语言,使他们能够灵活并最大限度地重用。许多“旧时代”的抱怨不再适用于C++,尤其是C++编译器已经变得多么高效。如果有时间开始转换到C++,这很可能就是它。

从C到C++过渡的3个原因相关推荐

  1. Linux系统rootfs切换到真正的根文件系统详细源码解析(附工作项目手动制作根文件实例)

    目录 一.简介 二.设计过程总结 2.1 busybox制作精简的文件系统并完成ramfs启动 2.2 通过精简的文件系统制作完整的文件系统并拷贝到硬盘 2.3 rootfs切换到真正的根文件配置 2 ...

  2. 如何从零开始搭建直播平台,从flash时代的rtmp到过渡期的flv和webrtc的未来以及简单聊聊webassmbly

    前言 在2020年12月flash正式落幕之后,流媒体领域是否有新的技术替代?有没有较为成熟的整体方案?市面上的直播/流媒体平台都在使用哪些方案?有没有通用又简单快速的搭建方案?不同的方案在行业内部也 ...

  3. 综合柜台业务基本规范

    综合柜台业务基本规范 第一节 银行柜台核算基础 一.账务组织 银行的账务组织包括明细核算和综合核算两个系统.明细核算是详细的.个别的核算,是分户反映各科目详细情况的核算系统:综合核算是全面的.概括的核 ...

  4. 计算机电路基础重要知识点,计算机电路基础期末复习指导.DOC

    计算机电路基础期末复习指导 福建广播电视大学计算机应用专业 <计算机电路基础(2)>期末复习指导 黄丽军 2005.12 一.课程考核有关说明: 本课程采用中央广播电视大学出版社的由任为民 ...

  5. Hyperledger Fabric 2.0 官方文档中文版 第3章 关键概念

    Hyperledger Fabric 2.0 官方文档中文版 第3章 关键概念 总目录 3.关键概念 引言 什么是区块链? 区块链为什么有用? 什么是Hyperledger Fabric? Hyper ...

  6. 深入理解面向对象和面向过程

    面向对象基本概念: 面向对象 ( Object Oriented ) 是将现实问题构建关系,然后抽象成 类 ( class ),给类定义属性和方法后,再将类实例化成 实例 ( instance ) , ...

  7. 普通用户如何加入鸿蒙,普通用户角度,谈论一下关于鸿蒙OS系统相关体验

    首先,个人更新鸿蒙OS大概有5天左右,在这几天深度体验后,我决定还是要写点相关体验感受跟大家分享一下.以下看法仅代表个人,我用过OPPO,用过iOS,用过小米,用过三星,目前手持之前狗东原价抢到的华为 ...

  8. macs14_苹果为什么要转向ARM,并且仍将支持Intel Macs?

    macs14 Source: Why Does Apple Move to ARM and Will it Still Supports Intel Macs? 资料来源: Apple为什么要转向AR ...

  9. android 官方默认动画,Android动画一:Activity过渡动画详细实现原理

    虽然 Android 5.0 之后推出了新的过渡动画方式,但通常只是用于特定的场合使用,activity.overridePendingTransition() 通用方式的过渡动画还是很常用. 原理分 ...

最新文章

  1. finally块中的代码一定会执行吗?
  2. Python教程:自定义排序全套方案
  3. win10使用WSL安装CentOS7
  4. 武侠乂服务器位置在哪,武侠乂手游秘境在哪里 地图秘境宝藏分布位置大全
  5. 5、Flutter 实现 ViewPager、bottomNavigationBar 界面切换
  6. 百度顶会论文复现(2):GAN综述
  7. 量子计算机功率,量子计算功耗知多少
  8. 3-3 编程练习:jQuery键盘事件案例
  9. 如果访问设备屏幕宽度小于1024,跳转到移动端
  10. python 中re模块学习随笔
  11. VoltDB开篇 简介
  12. Notification详解(含工具类)
  13. php寻仙记,【网站搭建】寻仙记+天空之城两款文字游戏PHP源码
  14. 河南自考本科英语可用计算机代替,河南:自学考试改革方案出炉 专业课可代替英语课程...
  15. HTML文字左侧留白,DIV CSS padding内补白(内边距)left right top bottom
  16. 什么平台制作表单工具效率高?
  17. 调试运用(电流标幺化,PWMDAC调试,ARCTAN反正切)
  18. amt是什么意思_汽车中的AT、MT和AMT是什么意思?有什么区别?
  19. Python课程第十一天_下午_课程笔记(包和模块)
  20. TP-Link路由WDS设置心得

热门文章

  1. kotlin中继承父属性使用构造方法
  2. css html span 块状不换行
  3. python程序如何执行死刑图片_如何判断对象已死
  4. 记录一次http请求失败的问题分析
  5. Aho-Corasick 多模式匹配算法(AC自动机) 的算法详解及具体实现
  6. HarmonyOS技术特性
  7. 如何在TVM上集成Codegen(下)
  8. 双圆弧插值算法(三,代码实现)
  9. Imec推出高性能芯片的低成本冷却解决方案
  10. 高精地图与自动驾驶(上)