从C到C++过渡的3个原因
从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个原因的更多相关文章
- Scrum 冲刺第四篇
我们是这次稳了队,队员分别是温治乾.莫少政.黄思扬.余泽端.江海灵 一.会议 1.1 28号站立式会议照片: 1.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 ...
- CSS 3学习——transition 过渡
以下内容根据官方规范翻译以及自己的理解整理. 1.介绍 这篇文档介绍能够实现隐式过渡的CSS新特性.文档中介绍的CSS新特性描述了CSS属性的值如何在给定的时间内平滑地从一个值变为另一个值. 2.过渡 ...
- 牛逼的css3:动态过渡与图形变换
写css3的属性的时候,最好加上浏览器内核标识,进行兼容. -ms-transform:scale(2,4); /* IE 9 */ -moz-transform:scale(2,4); /* Fir ...
- 用js触发CSS3-transition过渡动画
用js触发CSS3-transition过渡动画 经过这几天的工作,让我进一步的了解到CSS3的强大,原本许多需要js才能实现的动画效果,现在通过CSS3就能轻易实现了,但是CSS3也有自身的不足,例 ...
- 深入理解CSS过渡transition
× 目录 [1]定义 [2]过渡属性 [3]持续时间[4]延迟时间[5]时间函数[6]多值[7]阶段[8]触发[9]API 前面的话 通过过渡transition,可以让web前端开发人员不需要jav ...
- CSS3之过渡及2D变换
transition过渡 transition-duration:; 运动时间 transition-delay:; 延迟时间 transition-timing-function:; 运动形式 ea ...
- CSS3常用属性(边框、背景、文本效果、2D转换、3D转换、过渡、有过渡效果大图轮播、动画)
CSS3边框: 1.CSS3圆角:border-radius 属性--创建边框线的圆角 <body style="font-size:24px; color:#60F;"& ...
- CSS基础篇之背景、过渡动画
background-origin(背景原点) 设置元素背景图片的原始起始位置.必须保证背景是background-repeat为no-repeat属性才能生效. background-origin: ...
随机推荐
- 洛谷P1423 小玉在游泳
题目描述 小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦.已知小玉第一步能游2米,可是随着越来越累,力气越来越小,她接下来的每一步都只能游出上一步距离的98%.现在小玉想知道,如果 ...
- RING3级下枚举用户进程的基本姿势
简述 Ring3用户态下查看进程信息的基本方法 代码样例 #include <cstdio> #include <iostream> #include <cstdlib& ...
- Swift系列四 - 枚举
适度给类型起别名能够让代码更加易懂,开发效率更高,可维护性更好. 一.typealias(别名) typealias用来给类型起别名. typealias Byte = Int8 typealias ...
- 【JavaScript】Leetcode每日一题-组合总和4
[JavaScript]Leetcode每日一题-组合总和4 [题目描述] 给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target .请你从 nums 中找出并返回总和为 targ ...
- 0902-用GAN生成动漫头像
0902-用GAN生成动漫头像 目录 一.概述 二.代码结构 三.model.py 3.1 生成器 3.2 判别器 四.参数配置 五.数据处理 六.训练 七.随机生成图片 八.训练模型并测试 pyto ...
- web&HTML
内容索引 1. web概念概述 2. HTML web概念概述 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务 ...
- 2021最新Java面试题全集-20210326版
在手撕了数千道网络流传的面试题,外加十多个不眠之夜, 终于从里面精心挑选出约500道题目, 做为大家求职.跳槽前复习准备面试使用. 一:挑选题目的原则: 常考的.常被面试问到的 题目有一定的深度和难度 ...
- [Java] 数据分析 -- 大数据
单词计数 需求:输入小说文本,输出每个单词出现的次数 实现:分map.combine.reduce三个阶段实现 1 /* Data Analysis with Java 2 * John R. Hub ...
- [bug] C++:[Error] name lookup of 'i' changed for ISO '
错误原因:变量i只在for循环中可见,若在循环外使用需要单独定义 1 #include <iostream> 2 using namespace std; 3 4 int main(){ ...
- python基础之面向对象(二)(封装、继承、多态)
一.封装 (1)封装是面向对象的一大特点 (2)面向对象编程的第一步--将属性和方法封装到一个抽象的类当中 (3)外界使用类创建对象,然后让对象调用方法 (4)对象方法的细节都被封装在类的内部 1.案 ...