Skip to the content.

:balance_scale: 编码标准与合规要求

C++ 传统上占据的领域,其错误代价不是用损失的金钱来衡量,而是用人的生命来衡量:汽车电子、医疗设备、航空电子、工业自动化、轨道交通。在这类项目中,语言的自由反而成了问题,因此它会被约束——用一套编码规则、强制性的检查和文档化的开发流程。

这篇文章是这片领域的一张概览地图,而不是一份认证指南。它的目标是让你在招聘启事上看到”MISRA 经验”或”ISO 26262 项目”时明白它在说什么,并知道去哪里查找细节。

标准和要求非常多,下面只收录了其中最显眼的。并不存在一个统一的”必备集合”:每个项目都会根据行业、国家、客户和关键性等级使用自己的子集。只有当某个具体标准真的出现在你的项目上时,去深入研究它才有意义,而不是提前储备。

:warning: 要求和期限会变化。在做决定之前,请对照标准的当前版本、并与你公司的法务核实——这篇文章用于建立方向感,而不是用于得出法律结论。

:straight_ruler: 编码标准

它们把语言限制到一个更不容易搬起石头砸自己脚的子集:禁止在初始化之后动态分配内存、禁止异常、禁止隐式类型转换等等。是否遵守由静态分析器来检查——这样的规则集不靠人工核对。

:shield: 功能安全

这些标准回答的问题是”要发生什么,系统在失效时才不会造成伤害”。它们规范的与其说是代码,不如说是流程:需求、可追溯性、测试、文档,以及所用工具的资格认定。

这个领域的基础标准是 IEC 61508,它引入了安全完整性等级 SIL 1-4。下面这些行业标准是它的具体化:

:lock: 网络安全与供应链

对 C++ 世界来说这是一个相对较新的话题:监管机构正在把漏洞的责任转移到软件供应商身上。

:computer: 这在实践中意味着什么

如果你进入这样一个项目,改变的与其说是语言,不如说是代码周围的环境:

:question: 谁真正需要这些

不是所有人。 如果你写游戏、桌面应用、后端或者交易系统,实际上你很可能不会碰到这些标准,也没必要专门去学。

只有当你走向汽车电子、医疗设备、航空、航天、轨道交通或工业自动化时,这个话题才变成必修。对其他人来说,知道这些标准存在、以及它们大致讲什么就够了——面试时这样就够用。

例外是 CRA 和 SBOM。它们涉及的产品范围比传统的功能安全要广得多,因此即便是产品在欧洲销售的”普通”开发者,也值得去了解一下它们。


回到主页