CWARN.NOEFFECT.UCMP.LT.MACRO

宏中无符号值的无效比较始终为 false

CWARN.NOEFFECT.UCMP.LT.MACRO 检查器可标记宏中的代码,其中,无符号值与 0 的比较始终为 false。

漏洞与风险

如果 a 为无符号值,a < 0 和 0 > a 的比较始终为 false。这些比较没有任何效果,因此可能无法达到设计意图。

漏洞代码示例

复制
  #define RETURN_NEGATIVE(x) if (x < 0) return x
  
  int foo(usigned int a) {
    RETURN_NEGATIVE(a);  
    return 0;
  }

Klocwork 标记了第 4 行,其中的宏 RETURN_NEGATIVE 包含一个始终为 flase 的条件。