【发布时间】:2021-03-10 22:01:09
【问题描述】:
现在考虑以下代码在安全关键嵌入式软件中执行,其中gcc_optimization_level 的大小为 Level2。说一个函数,void foo(float v); 被调用为foo(a/b); 其中说a 和b 也是float。调用函数 foo 时计算 C 表达式 a/b 是否违反任何 MISRA C 准则?
ps:本题是上周较弱制定的上一版本修改的。现在这个问题确保它是一个单一的问题,而不是一个家庭作业问题,希望不会引起意见。
【问题讨论】:
-
为什么不编写这段代码并通过 MISRA 检查器运行? MISRA 是一个过于严格的标准,即使这样无辜的事情可能会被标记,我也不会感到惊讶。
-
无论如何,查看 MISRA-C 指南,我没有看到任何会限制函数调用中表达式评估的内容。
-
“编译器优化”(标记,并提到了一些特定的编译器)与 MISRA 有什么关系?我会说代码违反了建议规则,即您应该使用
float32_t而不是float。但是谷歌上提供了 MISRA 2008 pdf - 你读过吗?您是否尝试过搜索您可能违反的规则?你能展示真正完整的代码而不是片段吗?您担心此类代码可能会破坏哪些特定规则?它与优化有什么关系? -
在
a/b除法中检查溢出或被零除是否有一些要求?也许在函数调用表达式中这样做会更难遵守? -
亲爱的@EugeneSh。是否有任何 MISRA 检查器可以插入此代码并进行检查?我曾经有一个可以进行这些检查的 IDE,但我不再拥有该 IDE 的许可证 :(
标签: c compiler-optimization misra