MISRA C:2012 Dir 1.1
Any implementation-defined behavior on which the output of the program depends shall be documented and understood
描述
指令定义
Any implementation-defined behavior on which the output of the program depends shall be documented and understood. 1
理由
如果 C 标准允许编译器为构造选择规范,则代码构造具有实现定义的行为。ISO/IEC 9899:1999 (C99) 标准的附录 J.3 和 ISO/IEC 9899:1990 (C90) 标准的附录 G.3 中提供了实现定义的行为的完整列表。
如果您理解并记录了所有实现定义的行为,则可以确保程序的所有输出都能追根求源,没有意料之外。
Polyspace 实现
分析将检测 C99 中实现定义的行为及其在 C90 中的对应行为的以下可能性。如果您了解编译器实现的行为,请使用适当的注释来对分析结果进行申述。要对某个结果进行申述,请指定下列状态之一:已申述、未计划任何操作或不是缺陷。
提示
要对指示相同实现定义的行为的所有结果进行批量申述,请使用结果列表窗格中的详细信息列。点击列标题,以便将具有相同条目的所有结果分组在一起。在按住 Shift
键的同时依次选择第一个结果和最后一个结果。为其中一个结果指定一个状态。如果您未看到详细信息列,请右键点击任何其他列标题并启用此列。
根据 MISRA C:2012 Addendum 1,一些 MISRA C:2004 规则作为必需规则映射到 MISRA C:2012 Dir 1.1,包括:
Rule 12.12 - The underlying bit representations of floating-point values shall not be used.
Rule 13.3 - Floating-point expressions shall not be tested for equality or inequality.
Rule 20.5 - The error indicator
errno
shall not be used.
C99 标准附录参考 | 要记录的行为 | Polyspace® 如何提供帮助 |
---|---|---|
J.3.2:环境 | 可以用来定义 main 函数的替代方式。 | 分析会标记具有参量且返回类型不是以下类型的 int main(void) { ... } int main(int argc, char *argv[]) { ... } 请参阅 C99 标准的 5.1.2.2.1 节。 |
J.3.2:环境 | 环境名称的集合和用于更改 getenv 函数使用的环境列表的方法。 | 分析会标记对 请参阅 C99 标准的 7.20.4.5 节。 |
J.3.6:浮点 | 以 FLT_ROUNDS 的非标准值为特征的舍入行为。 | 如果 请参阅 C99 标准的 5.2.4.2.2 节。 |
J.3.6:浮点 | 以 FLT_EVAL_METHOD 的非标准负值为特征的计算方法。 | 如果 请参阅 C99 标准的 5.2.4.2.2 节。 |
J.3.6:浮点 | 将整数转换为不能精确表示原始值的浮点数时的舍入方向。 | 分析会标记从整数到较小大小的浮点数据类型的转换(例如,从 64 位 请参阅 C99 标准的 6.3.1.4 节。 |
J.3.6:浮点 | 将浮点数转换为较窄浮点数时的舍入方向。 | 分析会标记以下转换:
请参阅 C99 标准的 6.3.1.5 节。 |
J.3.6:浮点 | FENV_ACCESS pragma 的默认状态。 | 分析会标记对下列项之外的 pragma 的使用: #pragma STDC FENV_ACCESS ON #pragma STDC FENV_ACCESS OFF 请参阅 C99 标准的 7.6.1 节。 |
J.3.6:浮点 | FP_CONTRACT pragma 的默认状态。 | 分析会标记对下列项之外的 pragma 的使用: #pragma STDC FP_CONTRACT ON #pragma STDC FP_CONTRACT OFF 请参阅 C99 标准的 7.12.2 节。 |
J.3.11:预处理指令 | 对每个可识别的非 STDC #pragma 指令的行为。 | 分析会标记对符合以下条件的 pragma 的使用: #pragma pp-tokens STDC 没有紧跟 pragma 。例如:#pragma FENV_ACCESS ON 请参阅 C99 标准的 6.10.6 节。 |
J.3.12:库函数 | 除“上溢”或“下溢”浮点异常外,feraiseexcept 函数是否还引发“不精确”浮点异常。 | 分析会标记对 请参阅 C99 标准的 7.6.2.3 节。 |
J.3.12:库函数 | 除 "C" 和 "" 之外的其他字符串,可以作为 setlocale 函数的第二个参量传递。 | 当 请参阅 C99 标准的 7.11.1.1 节。 |
J.3.12:库函数 | 当 FLT_EVAL_METHOD 宏的值小于 0 或大于 2 时,为 float_t 和 double_t 定义的类型。 | 如果 请参阅 C99 标准的 7.12 节。 |
J.3.12:库函数 | 以 2 为底的对数, remquo 函数用于减少商的模数。 | 分析会标记对 请参阅 C99 标准的 7.12.10.3 节。 |
J.3.12:库函数 | 由 abort 、exit 或 _Exit 函数返回到主机环境的终止状态。 | 分析会标记对 请参阅 C99 标准的 7.20.4.1、7.20.4.3 或 7.20.4.4 节。 |
故障排除
如果您预计存在违规,但未看到该违规,请参阅Diagnose Why Coding Standard Violations Do Not Appear as Expected。
检查信息
组:实现 |
类别:必需 |
AGC 类别:必需 |
版本历史记录
在 R2017b 中推出1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.
The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:
MISRA C:2004
MISRA C:2012
MISRA C:2023
MISRA C++:2008
MISRA C++:2023
MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.