我的商店使用的是Coverity 2019.3。
我们启用了MISRA-C 2004。
我想禁用MISRA-C 2004规则2.2:源代码只能使用/*…*/注释。
cov-analyze
命令有disable
选项,但它只显示检查器。例如,MISRA-CAST可以使用--disable
。
我们在Windows 10上使用Coverity 2019.3,使用IAR 8.4编译器(构建器)。
那么,我如何配置Coverity来禁用MISRA-C 2004规则2.2呢?
Coverity MISRA检查是使用--misra-config
命令行选项自定义的,该选项后跟json语法配置文件名。请参阅Synopsys文章如何使用MISRA检查器分析主要源文件?
(MISRA_CAST
响应--disable
是一个例外,因为在内部,它的工作方式与其他的完全不同。)
MISRA_c2004.config
的文件,其内容为:
{
version : "2.0",
standard : "c2004",
title: "Customized MISRA 2004 Compliance",
deviations : [
{
deviation: "Directive 2.2",
reason: "We allow // comments here because ... ."
}
]
}
理想情况下,reason
应该解释为什么您的组织选择禁用该规则或包含指向或引用其他包含基本原理的文档的指针。我不是MISRA遵从性方面的专家,但我的理解是,MISRA审计员希望看到的证据是,决策是在适当考虑到系统安全的相关威胁后做出的,而不仅仅是出于一时兴起或为了程序员的方便。配置文件需要一个原因字符串,以确保原因随时可用,以满足审计。
然后将--misra-config MISRA_c2004.config
添加到cov-analyze
命令行。
请注意,我有未测试上面的配置文件,因为我没有访问工具了。请评论它是否有效,以便我可以修复这个答案或删除这一段。
Scott给出了在Coverity中解决问题的机制。
这篇文章(对于评论来说有点长)给出了一些背景。
,
MISRA C:2004(2004年发布)与ISO/IEC 9899:1990(又名C90
)保持一致- c++风格的//
注释不是C90的一部分,尽管一些编译器允许将其作为扩展,但当时存在不一致的实现导致已知问题…另外,它是一个语言扩展。
尽管是必需的MISRA C:2004 Rule 2.2过去是(现在仍然是)一个常见的偏差主题——该过程要求开发人员确保没有经历已知问题。
当然,如果您使用的是MISRA C:2004和C99或更高版本,您还需要对MISRA C:2004要求的规则1.1的偏差,并理解该决定的含义。
,
MISRA C:2012(首次发布于2012/2013)扩展了MISRA C以涵盖ISO/IEC 9899:1990(又名C99
),其中c++风格//
现在是该语言的一部分。
因此,MISRA C:2012没有与MISRA C:2004规则2.2等效的指南…因此,//
注释可以自由使用,没有任何偏差。
如果可能的话,我鼓励过渡到MISRA C:2012,原因有很多…C99
支持(因此//
注释)只是一个。
,
**参见简介**