【问题标题】:Dependency of MISRA-C coding rules checker to the compilerMISRA-C 编码规则检查器对编译器的依赖性
【发布时间】:2021-10-12 11:08:43
【问题描述】:

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

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

【问题讨论】:

  • 我觉得你问的不是很清楚。
  • “你怎么看?”太宽泛了。有什么问题?
  • MISRA 检查器和编译器之间有什么依赖关系是一个相当具体的问题,如果你只是放弃“你怎么看?”最后。
  • 鉴于您的问题是“为什么这个 MISRA-C 检查器工具需要知道我使用哪个编译器?”,我对您的问题是“您为什么关心该工具想知道哪个编译器?你用?”。除非您只是出于好奇而提出这个问题(这是合法的),但恐怕您的问题可能只有该工具的开发人员才能完全回答。
  • @GuillaumePetitjean MISRA-C 本身(5.3.2)还要求您记录如何配置静态分析器,您将其设置为忽略的内容以及原因等。具有讽刺意味的是,我现在看到了MISRA 指南中的此文本与我在下面的答案中所做的基本布尔类型的示例完全相同:)

标签: c misra


【解决方案1】:

一些指南依赖于了解实现在做什么——尤其是定义的实现方面,包括(但不限于整数大小,最大值/最小值、实现方法 boolean 等)

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

【讨论】:

  • 确实,第 4.3 节部分回答了我的问题,因为它指出:“应查看项目中使用的每个静态分析工具的文档,以了解如何配置分析器以匹配编译器的实现定义的行为,例如整数类型的大小 (...)"。我
【解决方案2】:

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

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

【讨论】:

  • 我不知道也不使用 Helix QAC 工具,但我知道许多工具提供额外的功能/检查(MISRA-C 之外),所以这可能是该工具需要信息的原因以int 大小为例。
  • @LucaPolito 是的,这也是真的,他们通常会检查 MISRA-C 之外的很多东西(如果它们有任何好处的话)。
  • @Lundin 所以你的意思是编译器会定义bool 本身,即使在 C90 中配置?
  • @GuillaumePetitjean 是的,嵌入式系统 C90 编译器中通常存在一些非标准扩展,您可以在某些头文件中找到一些自制的布尔类型。虽然回想起来上面 Luca 的评论可能是该工具想要了解编译器的主要原因,但它根本不一定用于 MISRA-C 目的。
猜你喜欢
  • 2013-10-15
  • 2014-09-29
  • 1970-01-01
  • 2017-10-21
  • 2011-02-04
  • 1970-01-01
  • 2010-12-04
  • 1970-01-01
  • 2021-09-22
相关资源
最近更新 更多