什么是 MISRA C 中的源引用?

What is source references in MISRA C?

提问人:Reza Bodaghi 提问时间:9/4/2022 最后编辑:LundinReza Bodaghi 更新时间:9/5/2022 访问量:90

问:

在MISRA C文档中,有关于“源引用”的解释,并且有一个表,其行数为: 未指定、未定义、实施定义、特定于区域设置、MISRA 指南、K&R、Koenig 和 IEC 61508,并将这些作为源参考引入。我研究了未指定、未定义、实现定义和特定于区域设置的行为。我对他们有些熟悉。但是我不知道源引用的概念,以及为什么在源引用中提到这些行为。还有一些具有源引用的 MISRA C 规则。这是什么意思? 谢谢。

c misra 未指定 实现定义行为

评论

0赞 AndreyKarpov 9/4/2022
什么是MISRA以及如何烹饪它:pvs-studio.com/en/blog/posts/cpp/0702

答:

1赞 Andrew 9/4/2022 #1

来源参考文献是MISRA对《指南》的理由的主要来源,如MISRA C第6.10节所述:

如果指南来自一个或多个已发布的来源,则这些 在指南后面的方括号中表示。这有两个 目的。首先,读者可以查阅具体的来源 希望更全面地了解 指南(例如,在考虑偏差请求时)。 其次,关于标准中描述的可移植性问题, 源的形式提供了有关 问题。

没有源引用的规则可能具有 源自贡献公司的内部标准,或 由审稿人建议,或被广泛接受的良好做法。

这些源引用分为两类:

  1. C 标准内部的那些
  2. 其他

C 标准内部的那些(列举在 C 标准的附录 J 中)包括:

  1. 未定义的行为
  2. 未指定行为
  3. 实现定义的行为
  4. 特定于区域设置的行为

C 标准之外的标准包括各种标准(例如 IEC 61508)或其他备受推崇的书籍

-- 见个人资料了解隶属关系

评论

0赞 Lundin 9/5/2022
在技术标准官僚机构的世界里,6.10 指向标准的附录 J 有点令人困惑,这是信息性的,而不是规范性的。所以它不应该被用作源。更正确的来源是直接在MISRA规则中给出附件J所指出的规范性章节。此外,附录 J 只是对标准中明确列出的定义不明确的行为的总结。有许多常见的错误隐含在UB中 - 人们也许可以在规范性章节中提供来源,但在附录J中找到一个来源。
0赞 Andrew 9/5/2022
在 C 标准中识别 IDB/USB/UDB 的整个主题很长。我们使用附录 J 是因为更容易显示该列表的覆盖范围,而不是整个标准的段落!下一个 C 标准至少应该有编号而不是未编号的项目符号......
0赞 Andrew 9/5/2022
当然,在那个技术标准官僚主义的世界里,MISRA C 不是一个标准,因此 ISO/IEC 的规范不适用
1赞 Lundin 9/5/2022
ISO/IEC 9899 是一个标准:)无论如何,对于熟悉 C 标准的人来说,挖掘与某个 MISRA 规则相对应的相关部分并不需要那么多工作。要找到诸如“不要使用递归”之类的东西的规范来源将要困难得多。尽管由于 Hatton 已经为一个安全子集创建了胚胎,但令我惊讶的是,他的书并没有更频繁地用作来源——例如,它附带了一个类似于 CERT C 使用的所有 UB 的严重性列表(无论如何在 C90 中)。
0赞 supercat 9/9/2022
@Lundin:C89 需要什么才能使源文本 blob 成为“符合 C 程序”?什么是“符合 C 的实现”?我想知道有多少其他“标准”像 C 标准一样松散地定义一致性,而没有提供远远超出一致性要求的强烈建议?