在函数参数中评估 C 表达式是否违反了 MISRA C 指南?

问题描述

现在考虑在安全关键嵌入式软件中执行的以下代码段,其中 gcc_optimization_level 的大小为 Level2。假设一个函数void foo(float v);调用foo(a/b);,其中 say ab 也是 float。在调用函数 a/b 时计算 C 表达式 foo 是否违反了任何 MISRA C 准则?

ps:这个问题是从上周制定的薄弱的上一个版本修改而来的。现在这个问题确保它是一个单一的问题,而不是一个家庭作业问题,希望不会引起意见。

解决方法

只要类型正确,MISRA C 中就不会阻止调用 foo( a / b )

在 MISRA C 中,essential types 的概念是尝试将更强的类型引入 C 语言 - 这在 MISRA C:2012 的附录 D 中有详细说明,规则 10.x 指南是强制执行。

同样,MISRA C 中除了第 4.2 节“了解编译器”和第 5.3.1 节“编译器配置”讨论必要知识(未详细说明任何指南)之外,没有任何内容讨论优化级别。这些部分现在构成了 (freely downloadable) MISRA Compliance 的一部分。

免责声明:请参阅个人资料。