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 发展历史:

  1. MISRA C:1998 – 第一版(汽车行业的原始指南)
  2. MISRA C:2004 – 第二版(考虑了用户反馈和跨行业应用)
  3. MISRA C:2012 – 第三版(包含对 C99 语言功能的支持,改进的强类型模型,分析关键字)
    • MISRA C:2012 (Feb 2019) – 第三版第一次修订(纳入了额外的安全准则),纳入了第 1 次修正案(AMD1)和技术更正 1(TC1) – 也称为 MISRA C:2019
    • MISRA C:2023 (Apr 2023) – 第三版第二次修订(包含对 C11 和 C18 语言功能的支持),纳入了第 2 次(AMD2)、第 3 次(AMD3)和第 4 次(AMD4)修正案,以及技术更正 2(TC2)。

本文将介绍第三版的初稿,也就是MISRA C:2012

MISRA-C:2012 PDF

软件准备

  1. 安装Cppcheck工具, 安装时勾选安装 addons
  2. VS Code中安装C/C++ Advanced Lint扩展

  3. 配置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,

    实现效果:

  4. 配置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"
    ],

    附件 misra_c2012_Rules.txt misra.json

    实现效果:

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

发表评论