☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

bool 对象不应参与位运算、大小比较、数值增减

10.2.4 ID_illBoolOperation
目录 › next › previous

bool 对象的值只能为真或假,不具有“大小”等数值意义,bool 对象参与位运算、大小比较、数值增减是不合理的。

示例:

bool foo(unsigned flags, unsigned flag) {
    return flags & flag != 0;               // Non-compliant
}

由于 != 的优先级高于 &,所以例中的 return 语句相当于先判断 flag 是否为 0,再将这个 bool 型的结果与 flags 按位与,这是没有意义的。

应改为:

bool foo(unsigned flags, unsigned flag) {
    return (flags & flag) != 0;             // Compliant
}

依据

ISO/IEC 14882:2003 5.2.6(1 2) ISO/IEC 14882:2003 5.3.2(1 2) ISO/IEC 14882:2003 D.1-deprecated ISO/IEC 14882:2011 5.2.6(1 2) ISO/IEC 14882:2011 5.3.2(1 2) ISO/IEC 14882:2011 D.1-deprecated

参考

CWE-682 CWE-783 CWE-1024 CWE-1025 MISRA C 2004 12.7 MISRA C 2012 10.1 MISRA C++ 2008 5-0-21 SEI CERT EXP46-C
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.