问题描述
现在考虑在安全关键嵌入式软件中执行的以下代码段,其中 gcc_optimization_level
的大小为 Level2。假设一个函数,void foo(float v);
被调用为 foo(a/b);
,其中 say a
和 b
也是 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 的一部分。
免责声明:请参阅个人资料。