cppcheck 使用 MISRA-C 规则检查
cppcheck 使用更严格的 MISRA-C 规则来检查代码
MISRA-C 介绍
MISRA-C 是一种软件开发标准,旨在提高C语言编写的嵌入式系统的可靠性、可维护性和安全性。MISRA, Motor Industry Software Reliability Association, 是一个由汽车行业组成的非营利组织,该组织制定了一系列的软件开发规范,其中包括 MISRA-C。
MISRA-C规范定义了一套C语言编码规则,旨在避免常见的编程错误和潜在的安全漏洞。这些规则涵盖了诸如变量声明、类型转换、循环和条件语句、函数使用等方面的内容。MISRA-C规范强调代码的可读性、可移植性和可靠性,并提供了一些严格的限制和建议,以确保代码的一致性和质量。
采用MISRA-C规范可以帮助开发人员编写更可靠、可维护和安全的C语言代码。它可以减少潜在的错误和漏洞,并提高代码的可靠性和可重用性。MISRA-C规范通常在嵌入式系统和安全关键系统的开发中得到广泛应用,特别是在汽车、航空航天、医疗设备等领域。
值得注意的是,MISRA-C规范并非适用于所有项目和环境,有时会对代码的灵活性和效率造成一定的限制。因此,在采用MISRA-C规范时,需要根据具体项目的需求和约束进行权衡和调整。
MISRA C 发展历史:
MISRA C:1998– 第一版(汽车行业的原始指南)MISRA C:2004– 第二版(考虑了用户反馈和跨行业应用)MISRA C:2012– 第三版(包含对 C99 语言功能的支持,改进的强类型模型,分析关键字)MISRA C:2012(Feb 2019) – 第三版第一次修订(纳入了额外的安全准则),纳入了第 1 次修正案(AMD1)和技术更正 1(TC1) – 也称为MISRA C:2019MISRA C:2023(Apr 2023) – 第三版第二次修订(包含对 C11 和 C18 语言功能的支持),纳入了第 2 次(AMD2)、第 3 次(AMD3)和第 4 次(AMD4)修正案,以及技术更正 2(TC2)。
本文将介绍第三版的初稿,也就是MISRA C:2012。
软件准备
- 安装Cppcheck工具, 安装时勾选安装 addons
-
VS Code中安装C/C++ Advanced Lint扩展

-
配置C/C++ Advanced Lint扩展
C/C++ Advanced Lint支持flexelint,lizard,flawfinder,clang,cppcheck多种代码检查工具,这里我们只使用Cppcheck,在VS Code的扩展设置里将其他几种工具的使能勾掉,否则VS Code会报错
// 配置Cppcheck安装路径 "c-cpp-flylint.cppcheck.executable": "D:\\InstalledSoftware\\IDE\\Cppcheck\\cppcheck", // 配置Cppcheck检查语言 "c-cpp-flylint.cppcheck.language": "C", // 去除其他检查工具使能 "c-cpp-flylint.flawfinder.enable": false, "c-cpp-flylint.flexelint.enable": false, "c-cpp-flylint.lizard.enable": false, "c-cpp-flylint.clang.enable": false, "c-cpp-flylint.clang.blocks": false,实现效果:

-
配置cppcheck按照MISRA-C规则的检查 MISRA 的规则描述文件有版权不能随便共享,不过可以在 github 上找找
"c-cpp-flylint.cppcheck.addons": [ "misra" ], "c-cpp-flylint.cppcheck.extraArgs": [ "--addon=D:\\InstalledSoftware\\IDE\\Cppcheck\\misra_2012_rules\\misra.json" ],实现效果:

- 其他方式
- 命令行方式
cppcheck --addon=misra.json somefile.c - 如果有充足的资金可以选择购买专业的静态检查工具,List of tools for static code analysis - Wikipedia网站上列出了所有主流的静态检查工具,搜索
"misra"即可找到支持 misra 的检查工具。
- 命令行方式