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



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

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

一些指南依赖于知道实现在做什么——特别是实现定义的方面,包括(但不限于整数大小,最大值/最小值,实现布尔值的方法等)

MISRA C甚至有一个章节4.2理解编译器4.3了解静态分析工具解决这些问题。

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

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