3.1 C 语言及其编译器

在开始编写本文档时,C 语言的 ISO 标准是 ISO / IEC 9899:1999 8,以下将该语言的版本称为 C99。但是,仍有许多编译器仍然支持其前身(由 ISO / IEC 9899:1990 [2] 定义并由[4],[5]和[6]修订并更正,以下称为 C90)。另外,还有一些编译器则提供了在两种语言版本之间进行选择的选项。

当前针对 C 语言的 ISO 标准是 ISO / IEC 9899:2011 13。但当该标准发布时,有关 MISRA C 指南的工作已接近完成,因此无法合并至更高版本的指南。

***小贴士:***使用 MISRA C 不需要阅读相关标准的副本,但(阅读相关标准的副本)会有帮助。

C90 和C99 之间的选择可能会受遗留代码数量以及目标处理器的编译器是否支持等因素影响。

为项目选择的编译器应该满足 C 语言所选版本规范的独立性的要求。该编译器可能会提供超出要求的功能(例如:提供语言的所有功能(独立性仅需提供明确定义的子集)),也可能提供语言标准所允许的扩展。

理想情况下,编译器开发人员应提供对编译器确实符合要求的确认,例如,通过提供运行的符合性测试和获得的结果的详细信息。

有时候编译器的选择可能有限,其质量可能未知。如果证实难以从编译器开发人员那里获取信息,则可以采取以下步骤来协助选择过程:

***小贴士:***某些流程标准在某些情况下要求对编译器进行鉴定,例如 IEC 61508:2010 [32],ISO 26262:2011 [23]和 DO-178C [24]。

3.2 分析工具

通过人眼检查源代码是否符合 MISRA C 是可能的,但这么做可能会非常耗时且非常容易出错。所以, 任何针对 MISRA C 检查代码的实际过程都需要使用至少一种静态分析工具。

尽管分析工具的验证与编译器的验证稍有不同,但适用于编译器选择的所有因素也适用于静态分析工具的选择。理想的分析工具应该能够;