【问题标题】:Rulesets for cppcheckcppcheck 的规则集
【发布时间】:2013-02-17 18:05:25
【问题描述】:

cppcheck 允许您创建自己的规则文件,但我不知道 cppcheck 的功能暴露了多少。

是否有人致力于执行JSFMISRA 规则的集合?

【问题讨论】:

  • 您要检查代码中的error还是style问题?
  • 例如,MISRA 是 C 语言的强子集,它禁止可能不安全的构造。正如 wiki 所说:“大多数指南都可以使用执行静态代码分析的工具进行检查。”但那里列出的工具是商业的。 MISRA 不会使代码无错误,但在 MISRA 确认代码中编写一些错误有点困难。 MISRA 检查主要是样式检查,但仍然有用。

标签: c++ testing static-code-analysis cppcheck safety-critical


【解决方案1】:

您将无法将所有 MISRA/JSF 规则和指令实现为 cppcheck 规则,主要是限制某些 C 语言功能和结构或与样式相关的直接规则(想到的一些:空格之前/在 ./-> 之后,单行上的参数 #,使用联合来提供访问内存的不同方法,在 char 之前存在无符号/有符号等)。

用户Ira Baxter 在另一个涉及 cppcheck 的问题上几乎把它钉在了comment 中:并非所有内容都可以表示/简化为模式。依赖模式自定义规则使得难以处理和检测更高级别的问题,例如与 types (例如 sizeof() on types;你会解析和收集用作类型表示的标记(typedef、枚举))继承 (例如类,包括派生类,用作虚拟和非虚拟) 范围。这些需要硬编码到 cppcheck 中(你总是可以 fork cppcheck...)

无论如何,您是否接触过 MISRA(或 JSF)规则?这是项目的要求吗?如果没有,您可以获取一份 MISRA 指南(您已经拥有 JSF 指南)并检查您可以使用 PCRE 模式实现的指南。如果这是一项要求,我建议您“投资”一个能够检查 MISRA/JSF 指南并使用这两种工具的商业产品。

最后一点:您不需要所有的 MISRA/JSF 规则,并且许多工具会留下一小部分。

【讨论】:

  • 对于模式匹配之外的规则,您可以使用clang-tidy中的框架。
  • @johnwait 不需要特定的规则集,但拥有一组正式的规则是(!),如果您要制定规则,您也可以使用自动方式检查它们。最后,我们编写了自己的列表并进行了代码审查
【解决方案2】:

据我所知,翻阅文档,它看起来很暴露。 http://cppcheck.sourceforge.net/manual.pdf.

【讨论】:

  • DTSCode,谢谢,但手册中没有预定义的“MISRA”或“JSF”规则集...
【解决方案3】:

Cppcheck 支持 MISRA。以下是有关受支持规则的概述:supported MISRA rules

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多