从C过渡到C ++的3个理由

news2024/11/16 5:55:42

几十年来,嵌入式软件工程师之间一直在争论他们应该使用C还是C ++。根据2020年嵌入式市场调查,在大多数情况下,微控制器制造商提供的软件都以C语言提供,实际上,有56%的嵌入式软件是用C语言编写的。但是,C ++逐渐流行起来,大约23%的新嵌入式软件项目是用C ++编写的。用C接近其50 个周年,它可能是时间开始转换从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 ++,那就很可能了。

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!(点击找小助理领取)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/947710.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于社交网络算法优化的BP神经网络(预测应用) - 附代码

基于社交网络算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于社交网络算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.社交网络优化BP神经网络2.1 BP神经网络参数设置2.2 社交网络算法应用 4.测试结果:5…

显示GPU进程所属docker 容器

一台服务器,每个人在上面run一个容器,跑各自的代码,虽然通过nvidia-smi可以看到每个进程占用的GPU,但是不好找进程对应的容器id,就没法确认到底是谁占用了较多GPU。 常规操作 通过 nvidia-smi 查看进程占用GPU情况&a…

[C/C++]指针详讲-让你不在害怕指针

个人主页:北海 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏✨收录专栏:C/C🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!&#x1f9…

【Vuex状态管理】Vuex的基本使用;核心概念State、Getters、Mutations、Actions、Modules的基本使用

目录 1_应用状态管理1.1_状态管理1.2_复杂的状态管理1.3_Vuex的状态管理 2_Vuex的基本使用2.1_安装2.2_创建Store2.3_组件中使用store 3_核心概念State3.1_单一状态树3.2_组件获取状态3.3_在setup中使用mapState 4_核心概念Getters4.1_getters的基本使用4.2_getters第二个参数4…

c++ boost::json

Boost社区12月11日发布了1.75版本,在之前,​​Boost使用Boost.PropertyTree解析​​JSON​​​,​​XML​​​,​​INI​​​和​​INFO​​​格式的文件。但是由于成文较早及需要兼容其他的数据格式,相比较于其他的​…

怎么自学嵌入式?

嵌入式开发,简直就是一个无穷无尽的知识海洋!你永远都学不够!当然啦,这并不意味着你得花个三五年才能掌握。如果你只是想找嵌入式开发的工作,其实只需花三五个月有针对性地学习,就可以完全hold住。本文就给…

MybatisPlus核心功能

文章目录 一、前言二、核心功能2.1、条件构造器2.1.1、基础查询条件2.1.2、复杂查询条件2.1.3、动态查询条件2.1.4、查询结果排序2.1.5、执行查询 2.2、主键策略2.2.1、自增主键策略2.2.2、UUID 主键策略2.2.3、雪花算法主键策略2.2.4、自定义 ID 生成策略 三、总结 一、前言 …

学习node之——如何在项目中使用MySQL、前后端的身份认证

上一篇文章只写了一丢丢,这篇才是正片,look look look 一、使用mysql模块操作数据库 1、查询数据 这里连接数据库的用户和密码都是我们在安装mysql时配置的密码。每个人的users表格里面数据不同,结果也会不一样哟! // 导入mys…

使用Spring Boot和Kafka实现消息发送和订阅

文章目录 一,新建Spring Boot1,Maven配置2,无法识别为SpringBoot项目3,无效的源发行版4,无法访问SpringApplication5,运行直接Finish6,服务运行成功 二,安装启动Kafka1,下…

从零开始学习 Java:简单易懂的入门指南之查找算法及排序算法(二十)

查找算法及排序算法 常见的七种查找算法:1. 基本查找2. 二分查找3. 插值查找4. 斐波那契查找5. 分块查找6. 哈希查找7. 树表查找 四种排序算法:1. 冒泡排序1.1 算法步骤1.2 动图演示1.3 代码示例 2. 选择排序2.1 算法步骤2.2 动图演示 3. 插入排序3.1 算…

基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文

背景 前面曾体验过通过零代码、可视化、拖拉拽的方式快速完成了从 MySQL 到 ClickHouse 的数据迁移,但是在实际生产环境,我们在迁移到目标库之前还需要做一些过滤和转换工作;比如,在诗词数据迁移后,发现原来 MySQL 中…

部署问题集合(二十二)Linux设置定时任务,并设置系统时间

前言 因为项目中经常用到定时任务,特此总结记录一下 步骤 大部分虚拟机创建后就自带定时服务,直接用命令就好编辑定时任务:crontab -e,在该文件下添加如下内容开机自启:reboot /home/autoRun.sh定时执行&#xff1a…

基于java+springboot+vue的交流互动系统-lw

​ 系统介绍: 随着现在网络的快速发展,网上管理系统也逐渐快速发展起来,网上管理模式很快融入到了许多企业的之中,随之就产生了“交流互动系统”,这样就让交流互动系统更加方便简单。 对于本交流互动系统的设计来说&a…

字节一面:你能讲一下跨域吗

前言 最近博主在字节面试中遇到这样一个面试题,这个问题也是前端面试的高频问题,作为一名前端开发工程师,我们日常开发中与后端联调时一定会遇到跨域的问题,只有处理好了跨域才能够与后端交互完成需求,所以深入学习跨域…

STM32F103驱动oled显示屏

STM32F103驱动oled显示屏 一.了解oled显示屏二.IIC协议驱动oled显示屏2.1 oled.c2.2 oled.h 三.效果展示 一.了解oled显示屏 oled显示屏和其他显示屏类似,不过他只有0.96英寸,屏幕较小,但是使用起来比较方便。有二种驱动方式,分别…

Python学习笔记——从面试题出发学习Python

Python学习笔记——从面试题出发学习Python Python学习笔记——从面试题出发学习Python1. 可变数据类型与不可变数据类型,深拷贝与浅拷贝,函数参数的传递机制1.1 变量与对象1.2 可变数据类型与不可变数据类型1.3 深拷贝与浅拷贝1.4 函数参数的传递机制1.…

SIP对讲求助终端,带功放输出

SV-7011TP SIP对讲求助终端,带功放输出 一、描述 网络对讲终端SV-7011TP,SV-7011TP能处理tcp/ip网络音频流,并驱动扬声器进行播音的终端,主要用于公共数字广播,媒体教学,报警等需要数字音频的领域。 SV-…

LinearAlgebraMIT_12_Graph

x.1 用Incidence matrix关联矩阵表示图 矩阵将图的关系数学表达了出来,如下, x.2 图的性质 如果一个数据结构是图,则意味着其组成关联矩阵的向量组是线性相关的,如果数据结构是树则线性无关。 通过对图的了解,我们可…

激活函数总结(二十四):激活函数补充(SquaredReLU、ModReLU)

激活函数总结(二十四):激活函数补充 1 引言2 激活函数2.1 SquaredReLU激活函数2.2 ModReLU激活函数 3. 总结 1 引言 在前面的文章中已经介绍了介绍了一系列激活函数 (Sigmoid、Tanh、ReLU、Leaky ReLU、PReLU、Swish、ELU、SELU、GELU、Soft…

【iOS】折叠cell

文章目录 前言一、实现效果二、折叠cell的实现原理三、实现折叠cell的高度变化四、实现选中点击的单元格总结 前言 在暑假的3GShare中用到了折叠cell控件,特此总结博客记录 一、实现效果 二、折叠cell的实现原理 首先我们需要知道ScrollView的是TableView的父类&a…