MISRA-C编码规则检查器对编译器的依赖

Dependency of MISRA-C coding rules checker to the compiler

我已经开始使用一种工具来检查是否符合 MISRA-C 2012。该工具是 Helix QAC。在配置期间,它请求 select 一个编译器。我的理解是 MISRA-C(和一般的编码规则)没有链接到编译器工具链,因为它们的 objective 之一是可移植性。此外,MISRAC 的一条规则是不使用语言扩展(显然这条规则可能被禁用或可能有例外)。 Helix 文档或支持对此相当模糊(仍然试图从他们那里获取更多信息)并且只是提到需要知道整数类型长度或标准包含的路径。但规则分析应该独立于 int 大小,标准包含的接口是标准的,因此不需要实际文件。

MISRA-C 规则检查器和编译器之间的依赖关系是什么?

每个 MISRA-C 检查器都需要知道一件事,那就是您使用的类型 bool。这是必要的,因为 MISRA-C:2012 仍然支持 C90,它没有对布尔类型的标准支持。 (C99应用程序应该使用_Bool/bool,句点。)它还需要知道false和true对应于哪些常量,例如stdbool.hfalsetrue 不可用。这可能是它询问使用哪个编译器的原因。查看附录 D - 基本类型了解详细信息。

类型大小 int 等与 MISRA 检查器无关。虽然对非标准扩展有一些了解可能会很好。我们不允许使用非标准扩展或实现定义的行为而不记录它们。通常怀疑是内联汇编程序、中断、特定位置的内存分配等。但是一旦我们将它们记录在我们对 Dir 1.1/Rule 1.1 的偏差中,我们可能希望禁用有关使用这些特定的、允许的偏差的警告。如果 MISRA 检查器完全不知道某个特性,那么如何禁用它引起的警告?

一些指南取决于了解实现在做什么 - 实现定义方面尤其如此,包括(但不限于整数大小、maximum/minimum 值、实现方法 布尔值 等)

MISRA C 甚至有一个部分 4.2 了解编译器,它与 4.3 了解静态分析工具 相结合解决了这些问题。