0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

主流的 MCU 开发语言为什么是 C 而不是 C++?

淘晶驰串口屏 ? 2025-05-21 10:33 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

单片机的地界儿里,C 语言稳坐中军帐,C++ 想分杯羹?难喽。咱电子工程师天天跟那针尖大的内存空间较劲,C++ 那些花里胡哨的玩意儿,在这儿真玩不转。

先说内存这道坎儿。您当 stm32f4 的 256k RAM、1M ROM 是标配?多数时候咱打交道的,是 stm8 这种 8k RAM 的 “小矮个儿”,stm32f1 的 32k RAM 就算是 “小康家庭” 了。就这么丁点儿地方,C 语言打个转都得缩手缩脚,C++ 带着类、对象、虚函数杀进来,光构造析构的开销就能把 ROM 啃掉一大块。您说上实时系统?C 语言写代码都得掰着字节算,C++ 的运行时环境?在这儿纯属 “奢侈品”,就像让小毛驴拉火车头,根本不配套。

再聊动态内存这事儿。keil 里 stm32f1 的 malloc 默认就 800 字节,您想用 C++ 的动态内存玩花样?那些依赖动态内存的类,分分钟把栈撑爆。单片机开发讲究的是 “把每滴血都榨干”—— 全局变量往 map 文件里一摆,编译完内存占用明明白白,出问题顺着寄存器和栈区就能摸到根儿。C++ 的动态内存监控库?得了吧,那库自己先占一块内存,本来就紧张的 RAM 哪经得起这么折腾?咱电子工程师没那么多讲究,估摸好内存直接定全局变量,爆了内存直接扒拉汇编找栈帧,比在 C++ 的内存海里捞针痛快多了。

硬件驱动这块儿,芯片厂压根没给 C++“开小灶”。就说 stm32 的 HAL 库,用句柄模仿类函数,可要是不用 cubemx 自己撸代码,那层层嵌套的函数能把人绕晕,改个驱动能薅掉半头头发。反过来看 C 语言的标准库,直接把寄存器封装得明明白白,想改哪儿就改哪儿,对着芯片手册就能硬刚寄存器位。要是发现厂商把寄存器位置改错了,分分钟就能揪出来。C++ 想玩硬件级操作?先穿过类封装的 “迷宫” 再说,等摸到寄存器,C 语言写的驱动早跑出老远了。

最后说说咱写代码的人。没错,咱在纯软大佬眼里就是 “菜”—— 四年大学就学了 C 语言和汇编,数据结构、算法啥的都是野路子,git、stackoverflow 也不熟,写的代码没少被骂 “屎山”。可您让那些玩惯高级语言的来搞单片机,分分钟在内存越界里打转。咱靠的就是对硬件的死磕劲儿,知道每一行代码在寄存器里怎么跳,C++ 的优雅在这儿不如一句精准的寄存器操作实在。您看市面上的 MCU 例程、厂商库,有几个不是 C 语言打底?生态在这儿摆着,咱犯不着为了好看去折腾那些不实用的语法糖。

在 MCU 开发这一亩三分地里,C 语言就像一把趁手的螺丝刀,简单、直接、高效,每一行代码都能钉在该钉的地方;C++ 则像一把雕花匕首,好看是好看,可在这儿施展不开。咱追求的不是代码多漂亮,而是让那几 k 的 RAM 和几十 k 的 ROM 实实在在跑起来,不出错、好调试、能落地 —— 就这点儿实在需求,C 语言足够漂亮地把活儿干完,何必去够那够不着的月亮呢?

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    18031

    浏览量

    369304
  • C语言
    +关注

    关注

    180

    文章

    7633

    浏览量

    142173
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    是否应该使用C++替代C语言进行开发工作

    软件是用C语言编写的。然而,C++已经逐渐普及,大约23%的新嵌入式软件项目都是用C++编写的。C语言
    发表于 11-05 09:00

    C语言C++运用

    识别等领域得到了进一步的推动和发展。嵌入式开发为什么用C语言?我们都知道,嵌入式开发要用C语言
    发表于 11-25 10:47

    是否应该使用C++替代C语言进行开发工作

    ,56%的嵌入式软件是用C语言编写的。然而,C++已经逐渐普及,大约23%的新嵌入式软件项目都是用C++编写的。C
    发表于 12-15 07:31

    c++程序设计语言题解

    c++程序设计语言题解是与Bjarne Stroustrup的《C++程序设计语言》一书配套使用的习题解答,为从《C++程序设计
    发表于 09-05 16:00 ?121次下载
    <b class='flag-5'>c++</b>程序设计<b class='flag-5'>语言</b>题解

    CC++语言参考手册

    CC++语言参考手册
    发表于 06-19 11:12 ?23次下载

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

    C++是在C语言的基础上发展来的,但是并不是C++C语言
    发表于 12-11 10:17 ?3.2w次阅读

    C/C++编程语言学习难点及语言

    一般学C++前都要学C,所以通常叫它们C/C++C/C++历经40余年,也是经久不衰的号称“永
    发表于 08-15 10:24 ?2470次阅读

    C语言C++相互调用

    ? ? 1CC++相互调用 在一个嵌入式系统中大部分的底层和驱动层更多的是采用C语言来进行开发
    的头像 发表于 01-18 11:05 ?3671次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>与<b class='flag-5'>C++</b>相互调用

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

    在嵌入式软件程序开发中,C语言无疑是最常被使用的程序语言。不过应该明白的是,有些嵌入式硬件同时提供C语言
    发表于 11-03 14:21 ?60次下载
    嵌入式程序<b class='flag-5'>开发</b>,<b class='flag-5'>C</b><b class='flag-5'>语言</b>和<b class='flag-5'>C++</b>究竟应该用哪个?

    C++语言的发展

    今年的CPP North C++大会上,谷歌宣布了一门新的编程语言Carbon,并称其将是“C++的继任者”。
    发表于 08-15 14:22 ?805次阅读

    C语言不是最好的,却是我最爱的

    虽然 C 语言不是我所学的第一门语言,也不是我的最后一门语言,但是我仍然非常喜欢
    发表于 11-24 09:47 ?649次阅读

    浅谈C语言C++的前世今生

    C++开发人员将有这些问题归咎于CC开发人员则认为C++
    发表于 05-26 09:27 ?704次阅读
    浅谈<b class='flag-5'>C</b><b class='flag-5'>语言</b>与<b class='flag-5'>C++</b>的前世今生

    C语言C++的区别看法

    编写了自己的业务爱好项目。那么,为什么我没有抛弃 C 选择其他语言呢?我对于 C++的看法又是如何的呢? 1 为什么说C
    的头像 发表于 07-06 14:29 ?1371次阅读

    vb语言c++语言的区别

    Microsoft开发的一种面向对象的事件驱动编程语言。它的设计目标是简化编程过程,让初学者也能快速上手。与之相比,C++语言是一种通用的、面向对象的编程
    的头像 发表于 02-01 10:20 ?3445次阅读

    c语言,c++,java,python区别

    C语言C++、Java和Python是四种常见的编程语言,各有优点和特点。 C语言
    的头像 发表于 02-05 14:11 ?3352次阅读