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

sizeof 表达式的结果不应与 0 或负数比较

10.7.6 ID_sizeof_zeroComparison
目录 › next › previous

将 sizeof 表达式的结果与 0 或负数比较往往意味着逻辑错误。

标准规定,如果 sizeof 作用于完整类型结果一定大于 0,如果作用于不完整的类型则无法通过编译。

示例:

void foo(int* p) {
    if (sizeof(p)) {  // Non-compliant, always true
        ....
    }
}

注意,在某些 C 环境中,sizeof 作用于空结构体或联合体结果可能是 0,但这属于未定义的行为,如:

struct A {} a;
printf("%zu\n", sizeof(a));  // What is output?

空结构体或联合体在 C 标准中属于非法类型,示例代码可能会输出 0,也可能不会通过编译。

依据

ISO/IEC 9899:1999 6.7.2.1(7)-undefined ISO/IEC 9899:2011 6.7.2.1(8)-undefined ISO/IEC 14882:2003 5.3.3(1 6) ISO/IEC 14882:2003 9(3) ISO/IEC 14882:2011 5.3.3(1 6) ISO/IEC 14882:2011 9(3) ISO/IEC 14882:2017 8.3.3(1 6) ISO/IEC 14882:2017 12(4)

参考

CWE-1025
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.