说嵌入式不能用C++的,你们写过超过10万行的嵌入式项目吗?
说嵌入式不能用C的你们写过超过10万行的嵌入式项目吗一句话观点在MCU上跑C确实是杀鸡用牛刀但在超过5万行代码的嵌入式Linux应用中不用C才是给自己找麻烦。先交代背景免得被喷。我从2008年开始做嵌入式前7年纯C后11年C和C混用。做过裸机、RTOS、嵌入式Linux。用C写过最复杂的项目是一个带图形界面的医疗诊断设备纯C代码12万行驱动层C代码3万行跑在ARM Cortex-A7上。所以别跟我说你没在嵌入式里写过C——我写了十几年了。也别跟我说C不适合嵌入式——我拿C做的产品已经卖了上万台通过了医疗认证至今没出过因为C特性导致的严重bug。我想说关于C在嵌入式领域的争论大部分观点都是建立在没写过大型嵌入式项目这个前提下的。反对C进嵌入式的三个经典论据一个一个拆论据一“C太臃肿不适合资源受限的环境”这话在1985年成立在2026年已经不成立很久了。我们来算笔账一个典型的ARM Cortex-M4单片机比如STM32F4有192KB RAM、1MB Flash。你告诉我C的哪个特性是这192KB跑不动的虚函数一个vtable指针4字节一个虚函数表就几KB。模板编译后生成的是具体代码不会比手写的C代码更大实际上因为编译器的优化模板生成的代码往往比手写C更紧凑。异常谁在嵌入式里开异常关掉就行了。-fno-exceptions是标准配置。RTTI同上-fno-rtti。真正导致C臃肿名声的是一些程序员滥用特性比如在中断里new/malloc、深度继承链、滥用模板元编程这是人的问题不是语言的问题。我最近的一个项目C编译出来的固件大小是208KB而之前用C写的同功能固件是196KB。差距12KB不到6%。而开发时间缩短了大约30%因为C的vector、string、智能指针、RAII机制帮我省了大量手写内存管理的时间。你告诉我这6%的Flash代价值不值论据二“C的抽象会掩盖底层细节不适合做嵌入式”这个论据我听了十几年每次听都觉得好笑。嵌入式工程师最引以为傲的能力之一就是对底层了如指掌。于是很多人形成了路径依赖“我理解的才是好的我不理解的封装都是坏的。”但问题来了——你对底层的了如指掌到底给你带来了多少实际收益你用C写了一个UART驱动对每个寄存器的每一位都了如指掌。但你的队友接手后看了三天才看懂你的代码。因为你的了如指掌只在你的脑子里代码里全是位运算和宏定义魔法。换成CclassUART{// 底层寄存器都在这里能看懂吗uint32_tvolatile*DRreinterpret_castuint32_t*(0x40011000);public:// 但是上层使用者不需要管这些voidsend(conststd::vectoruint8_tdata){for(autobyte:data){*DRbyte;while(!(*DR0x80));// 等待发送完成}}};底层细节还在那里完全没丢。只是通过类封装给了调用者一个干净的接口。这叫抽象不叫掩盖。你总不能说TSMC在制造芯片的时候因为不知道你写的每个晶体管是干嘛的所以芯片就不好用吧论据三“嵌入式团队没几个人会C上了C谁来维护”这个论据是最诚实的也是最有道理的。如果你们团队5个人4个只会C1个C/C混用那确实不应该用C。这不是C的问题是团队技能的问题。但我想反问一句既然你知道C有好处为什么不去学2002年的时候大部分嵌入式工程师还只会汇编。那时候有人说用C做嵌入式也被骂C太高级了掩盖了底层细节。你看历史总是惊人的相似。每个时代的技术保守派都说着同样的话只是关键词换了一下。C在嵌入式里到底适合干什么说了这么多我也不是主张所有嵌入式项目都应该用C。要分场景。适合用C的场景✅ 代码量超过5万行的嵌入式Linux应用✅ 有复杂状态机/业务逻辑的可穿戴设备固件✅ 需要图形界面LVGL/CSTML/emWin的设备✅ 网络协议栈/物联网平台✅ 需要长期维护的产品C的强类型和封装让重构更安全✅ 团队有2个以上C熟练成员不适合用C的场景❌ 裸机/RTOS上的简单外围控制点灯、读传感器❌ ROM/RAM以KB为单位的超低端MCU4KB以内的❌ 团队全员零C经验❌ 硬实时中断处理代码这部分本来也应该用C或汇编我个人的经验法则小于1万行1-5万行5-20万行大于20万行Flash 64KBFlash 256KB会C不会C项目规模C语言C语言优先C优先, C配合必须C, 否则维护成本爆炸MCU资源汇编/C可以考虑C局部使用团队能力大胆用先培训再上用C的正确姿势别做傻事如果决定用C有些红线千万别踩1. 关掉你不用的特性CXXFLAGS -fno-exceptions -fno-rtti -fno-threadsafe-statics CXXFLAGS -ffunction-sections -fdata-sections LDFLAGS -Wl,--gc-sections关掉异常和RTTI这两个是C运行时开销的主要来源。在嵌入式里你不需要它们。2. 不在堆上分配关键资源// 可以——在嵌入式里用new的问题不是new本身是碎片化auto*bufnewuint8_t[1024];// 在初始化时一次分配// 不要频繁new/delete// 更好——栈分配uint8_tbuf[1024];// 更好——静态分配staticuint8_tbuf[1024];3. 用RAII管理硬件资源这是C对比C最大的优势classGpioOutput{GPIO_TypeDef*port;uint16_tpin;public:GpioOutput(GPIO_TypeDef*p,uint16_tpi):port(p),pin(pi){// 构造函数里初始化port-CR|pin;// 配置为输出}~GpioOutput(){// 析构函数里清理port-CR~pin;port-ODR~pin;// 拉低}voidset(boollevel){if(level)port-ODR|pin;elseport-ODR~pin;}};// 使用——即使异常返回GPIO也会被正确清理voiddoSomething(){GpioOutputled(GPIOA,GPIO_PIN_5);led.set(true);// 函数退出时led的析构函数自动执行}这不仅仅是语法糖。RAII让嵌入式代码的资源泄露问题从runtime bug变成了compile-time guarantee。4. 模板生成代码但要关注代码膨胀// 好的模板用法——编译期计算出常量templateintNconstexprintfactorial(){static_assert(N0N10,Dont blow up the binary);returnN*factorialN-1();}// 不好的模板用法——为每个类型生成一份代码templatetypenameTTmax(T a,T b){returnab?a:b;}// 如果你给int、float、double都调用了就会生成三份代码对于内存受限的嵌入式设备模板要节制使用。好在现在有__attribute__((cold))和LTO来帮助压缩。最后说一句我对C进嵌入式的态度一直是别为了用C而用C但也别因为别人说不行就不用。我职业生涯最大的两次技术债务都是因为团队觉得C太复杂所以坚持用C造成的——第一次是一个LED控制器的固件用C写到最后25000行一个static函数调另外13个static函数没有任何封装任何一个人改代码另外三个人需要rebase。第二次是一个工业协议栈用C写了6万行宏定义套宏定义void*指针满天飞。后来重构时有C经验的人用模板策略模式把核心逻辑从6万行压缩到了2万行bug率直接降了一个数量级。语言不是银弹。但选错语言的代价往往在项目第三年才显现出来——那时候你已经来不及换了。所以我的建议很简单10万行以下的项目随便你用C还是C都能做出来。10万行以上或者需要长期维护的项目认真考虑C。不管用什么语言团队能力永远是第一位的。别跟风但也别守旧。

相关新闻

华为eNSP实战:SSH密钥认证配置与安全远程管理

华为eNSP实战:SSH密钥认证配置与安全远程管理

1. 项目概述:为什么我们需要告别密码登录?在任何一个网络工程师的日常工作中,远程管理网络设备都是最基础、最高频的操作。无论是调试一台核心交换机,还是检查防火墙的策略,我们最常用的工具就是SSH。长久以来&#xf…

2026/8/18 10:42:22 阅读更多 →
LLM、Embedding、RAG、Agent、Function Calling、幻觉 完整详解

LLM、Embedding、RAG、Agent、Function Calling、幻觉 完整详解

目录 一、LLM 大语言模型(Large Language Model) 1. 定义 2. 核心原理 3. 局限(后续技术全部用来弥补 LLM 缺陷) 4. 常见代表 二、Embedding 向量嵌入模型 1. 定义 2. 核心逻辑 3. 工作流程 4. 和 LLM 的区别 5. 核心用…

2026/8/16 19:29:36 阅读更多 →
VR-Reversal:基于MPV+Lua的实时3D VR视频转2D播放方案

VR-Reversal:基于MPV+Lua的实时3D VR视频转2D播放方案

1. 项目概述:当3D VR视频遇上普通屏幕如果你手头有一些精彩的3D VR视频,比如用全景相机拍摄的家庭聚会,或者从网上下载的沉浸式风光纪录片,但手边没有VR头显,或者只是想在大屏电视上跟家人一起分享,该怎么办…

2026/8/16 19:25:46 阅读更多 →

最新新闻

HsMod 炉石插件零基础实战指南:从安装避坑到按场景调优

HsMod 炉石插件零基础实战指南:从安装避坑到按场景调优

HsMod 炉石插件零基础实战指南:从安装避坑到按场景调优 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod 如果你是炉石传说玩家,大概都经历过这样几个瞬间&#xff1a…

2026/8/18 16:31:59 阅读更多 →
保姆级指南:用 OpenCore Legacy Patcher 给老 Mac 装上新版 macOS

保姆级指南:用 OpenCore Legacy Patcher 给老 Mac 装上新版 macOS

保姆级指南:用 OpenCore Legacy Patcher 给老 Mac 装上新版 macOS 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你的 Mac 是不是也弹过那句扎心…

2026/8/18 16:31:59 阅读更多 →
SingGuard-NSFA-4B是什么?蚂蚁集团开源智能体AI安全护栏终极指南

SingGuard-NSFA-4B是什么?蚂蚁集团开源智能体AI安全护栏终极指南

SingGuard-NSFA-4B是什么?蚂蚁集团开源智能体AI安全护栏终极指南 【免费下载链接】SingGuard-NSFA-4B 项目地址: https://ai.gitcode.com/hf_mirrors/inclusionAI/SingGuard-NSFA-4B SingGuard-NSFA-4B 是蚂蚁集团 SingGuard 团队(AI 安全实验室…

2026/8/18 16:31:59 阅读更多 →
【信息科学与工程学】第一百五十九篇 网络处理器(NP)与 ASIC 的指令集01

【信息科学与工程学】第一百五十九篇 网络处理器(NP)与 ASIC 的指令集01

以下基于网络处理器(NP)与 ASIC 的通用公开架构进行建模——NP 内部由微码处理器 + 硬件协处理器组成,转发引擎使用专用精简指令集,针对数据读写、状态判断、哈希查找等网络处理操作优化;ASIC 则以硬连线逻辑实现最高性能 。 🎯 总览:ASIC/NP 包处理指令体系 现代 NP …

2026/8/18 16:31:59 阅读更多 →
小说批量下载完整指南:novel-downloader 帮你轻松备份 100+ 网站的离线书库

小说批量下载完整指南:novel-downloader 帮你轻松备份 100+ 网站的离线书库

小说批量下载完整指南:novel-downloader 帮你轻松备份 100 网站的离线书库 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader 那天晚上十一点,你照例点开追了三年…

2026/8/18 16:31:59 阅读更多 →
老旧Mac如何免费升级最新macOS?OpenCore Legacy Patcher完整上手指南

老旧Mac如何免费升级最新macOS?OpenCore Legacy Patcher完整上手指南

老旧Mac如何免费升级最新macOS?OpenCore Legacy Patcher完整上手指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 如果你的Mac是2014年、2015年…

2026/8/18 16:30:59 阅读更多 →

日新闻

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 如果你还停留在"看网课 不停暂停 截图 …

2026/8/18 0:00:57 阅读更多 →
思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 你是不是也经历过这种时刻:设计稿里…

2026/8/18 0:00:58 阅读更多 →
华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, …

2026/8/18 0:00:59 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →