c - MISRA 13.5 关于非编译示例的问题
问题描述
试图理解不符合规则 13.5 的示例。
MISRA-2012 规则 13.5 规定“逻辑 && 或 || 运算符的右手操作数不得包含持久的副作用”,其基本原理是“......可能会或可能不会发生可能与程序员期望相反的副作用。 " 我理解并完全同意这一点。然而,他们最后的不合规代码示例是:
/* Non-compliant if fp points to a function with persistent side effects */
( fp != NULL ) && ( *fp ) ( 0 );
这种结构看起来非常安全,因为调用函数的条件和决定是直接相关的,其目的是不取消引用 NULL 指针。我理解 if 语句会更清晰,但如果有人有进一步的见解,我会感兴趣。
解决方案
这种结构看起来非常安全,因为调用函数的条件和决定是直接相关的,其目的是不取消引用 NULL 指针。我理解 if 语句会更清晰,但如果有人有进一步的见解,我会感兴趣。
MISRA 尝试定义可以解释的规则,而不必猜测程序员的意图。所以是的,如果在指针为 NULL 的情况下有意避免函数调用,那么您提供的构造很好,但是执行该代码的 MISRA 分析的机器不一定能识别这种可能性。该规则主要针对&&
or的两个操作数||
不直接相关的条件语句。拒绝您描述的案例是附带损害。
当然,您可以将您的案例替换为
if (fp != NULL) {
(*fp)(0);
}
. 就个人而言,我发现该if
语句比原始表达式语句更清晰。当诸如原始表达式之类的表达式出现在 , 或 语句的条件下时,这并不是一个明确的调用if
,while
但是for
所有这些都可以重新构造以符合 MISRA。
推荐阅读
- angular - angular8 访问使用 ngTemplateOutlet 创建的 ng-template 内容
- android - android studio 3.6 中的 Gradle 同步失败
- c - 如何编写一个以 RGB 缓冲区为输入的 gstreamer 插件?
- composer-php - Seld\JsonLint\ParsingException "/root/.composer/auth.json" 安装后不包含有效的 JSON
- c++ - C++ 中带有 Clion 的简单程序“在 '&&' 标记之前需要 `,' 或 `...'”
- jasmine - 量角器 - 茉莉花类型错误:无法读取未定义的属性“结果”
- netlogo - 在海龟的完整有向加权图中删除多个链接
- python - 使用 Selenium/Python 在 Datepicker 中更改日期
- php - 从具有不同时区的表中获取当前日期记录
- arrays - Swift - Tableview 无法通过搜索查询正确更新