从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. Scrum 冲刺第四篇

    我们是这次稳了队,队员分别是温治乾.莫少政.黄思扬.余泽端.江海灵 一.会议 1.1  28号站立式会议照片: 1.2  昨天已完成的事情 团队成员 昨日已完成的任务 黄思扬 活动内容管理页(前端) ...

  2. transtion:过渡动画

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px Monaco; color: #4f5d66 } p.p2 { margin: 0.0px 0 ...

  3. CSS 3学习——transition 过渡

    以下内容根据官方规范翻译以及自己的理解整理. 1.介绍 这篇文档介绍能够实现隐式过渡的CSS新特性.文档中介绍的CSS新特性描述了CSS属性的值如何在给定的时间内平滑地从一个值变为另一个值. 2.过渡 ...

  4. 牛逼的css3:动态过渡与图形变换

    写css3的属性的时候,最好加上浏览器内核标识,进行兼容. -ms-transform:scale(2,4); /* IE 9 */ -moz-transform:scale(2,4); /* Fir ...

  5. 用js触发CSS3-transition过渡动画

    用js触发CSS3-transition过渡动画 经过这几天的工作,让我进一步的了解到CSS3的强大,原本许多需要js才能实现的动画效果,现在通过CSS3就能轻易实现了,但是CSS3也有自身的不足,例 ...

  6. 深入理解CSS过渡transition

    × 目录 [1]定义 [2]过渡属性 [3]持续时间[4]延迟时间[5]时间函数[6]多值[7]阶段[8]触发[9]API 前面的话 通过过渡transition,可以让web前端开发人员不需要jav ...

  7. CSS3之过渡及2D变换

    transition过渡 transition-duration:; 运动时间 transition-delay:; 延迟时间 transition-timing-function:; 运动形式 ea ...

  8. CSS3常用属性(边框、背景、文本效果、2D转换、3D转换、过渡、有过渡效果大图轮播、动画)

    CSS3边框: 1.CSS3圆角:border-radius  属性--创建边框线的圆角 <body style="font-size:24px; color:#60F;"& ...

  9. CSS基础篇之背景、过渡动画

    background-origin(背景原点) 设置元素背景图片的原始起始位置.必须保证背景是background-repeat为no-repeat属性才能生效. background-origin: ...

随机推荐

  1. 【转】如何用MTR诊断网络问题

    MTR 是一个强大的网络诊断工具,管理员能够用它诊断和隔离网络错误,并向上游提供商提供有关网络状态的有用报告.MTR 通过更大的采样来跟踪路由,就像 traceroute + ping 命令的组合.本 ...

  2. android调用号和libc

    调用号(以arm平台为例)在/bionic/libc/kernel/uapi/asm-arm/asm/unistd.h: /* WARNING: DO NOT EDIT, AUTO-GENERATED ...

  3. 神经网络与机器学习 笔记—Rosenblatt感知器收敛算法C++实现

    Rosenblatt感知器收敛算法C++实现 算法概述 自己用C++实现了下,测试的例子和模式用的都是双月分类模型,关于双月分类相关看之前的那个笔记: https://blog.csdn.net/u0 ...

  4. 006-Java的访问权限控制符和包导入机制

    目录 一.Java的访问权限控制符 一.访问控制符的作用 二.访问控制符的分类 二.Java的包导入机制 一.为什么要使用package? 二.package怎么用? 三.对于带有package的ja ...

  5. .NET平台系列7 .NET Core 体系结构详解

    系列目录     [已更新最新开发文章,点击查看详细]   .NET Core 是基于.NET Framework 为基础,借鉴了其优秀的思想与强大的功能,经过重新设计与构建,实现了.NET Fram ...

  6. C++ primer plus读书笔记——第11章 使用类

    第11章 使用类 1. 运算符重载是一种形式的C++多态. 2. 不要返回指向局部变量或临时对象的引用.函数执行完毕后,局部变量和临时对象将消失,引用将指向不存在的数据. 3. 运算符重载的格式如下: ...

  7. 企业是否可以用CRM做邮件营销?

    最近总有一些从事外贸,跨境电商的朋友问小Z:"我的企业能用CRM做邮件营销吗?" 我回答:"能,Zoho CRM系统不但能用来发营销邮件,还发得聪明.发得到位." ...

  8. JDBC核心技术(获取数据库链接、数据库事务、数据库链接池)

    @ 目录 前言 数据的持久化 Java数据存储技术 JDBC介绍 JDBC体系结构 获取数据库链接 Driver接口 加载注册JDBC驱动 获取数据库链接 数据库链接方式(实例) 方式一:代码中显示出 ...

  9. 重新整理 .net core 实践篇————配置应用[一]

    前言 本来想整理到<<重新整理.net core 计1400篇>>里面去,但是后来一想,整理 .net core 实践篇 是偏于实践,故而分开. 因为是重新整理,那么就从配置开 ...

  10. javaWeb——jsp

    JavaBean 提供一个默认的无参构造函数 需要被序列化并且实现了 Serializable 接口 可能有一系列可读写属性 可能有一系列的 getter 或 setter 方法