MISRA C:2012 Rule 15.6
The body of an iteration-statement or a selection-statement shall be a compound statement
描述
规则定义
The body of an iteration-statement or a selection-statement shall be a compound- statement 1 .
理由
如果与迭代或选择语句相关的代码模块未包含在花括号中,则可能会出现关联错误。例如:
由于代码的缩进,您可能会错误地将一行代码与迭代语句或选择语句关联起来。
您可能会在迭代语句或选择语句之后意外地添加分号。由于分号的存在,紧跟在语句后面的行不再与该语句相关联,即使您的本意并非如此。
此检查项强制执行在选择或迭代语句后添加大括号的惯例,即使在主体中只有一行也是如此。后来,当添加更多行时,添加这些行的开发人员无需特别标注花括号的缺失并手动添加。
Polyspace 实现
检查项将 for
循环标记为,其中 for
语句后的第一个令牌不是左大括号,例如:
for (i=init_val; i > 0; i--) if (arr[i] < 0) arr[i] = 0;
if
、else if
、else
、switch
、for
和 do..while
语句也执行类似的检查。结果详细信息窗格中的消息第二行指示了违反规则的语句。例如,在上例中,存在两个违规情况。消息的第二行指出了一个违规的 for
循环和另一个违规的 if
条件。
报告中的补充消息
else 关键字后应跟一个复合语句或另一个 if 语句。
一个 if (表达式) 结构必须跟在一个复合语句之后。
构成 while 语句主体的语句必须是一个复合语句。
构成 do ... while 语句主体的语句应为复合语句。
for 语句的主体部分应为一个复合语句。
开关语句的主体部分应为复合语句。
故障排除
如果您预期会出现违规,但未看到该违规,请参阅诊断为何编码规范违规未按预期显示。
示例
检查信息
组:控制流 |
类别:必需 |
AGC 类别:必需 |
版本历史记录
在 R2014b 中推出
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.