CXX.BITOP.NON_CONST_OPERAND

位运算符只能应用于常数。

如果常数表达式未用作位运算符的操作数,此检查器就会报告缺陷。

漏洞与风险

在非常数表达式上执行位运算可能会导致意料之外的结果。

漏洞代码示例

复制
   void func(int var1, int var2)
   {  
     int var4 = var1 | var2; 
     int var5 = var1 & var2;
   }

在以上示例中,第 3 行和第 4 行不符合要求,因为其将位运算符应用于非常数变量。Klocwork 在第 3 行和第 4 行报告 CXX.BITOP.NON_CONST_OPERAND 缺陷,指出“位运算符只能应用于常数。”

修正代码示例

复制
   void func(int var1, int var2)
   {  
     int var4 = 5 | 10; 
     int var5 = 1 & 3;
   }

在修正代码示例中,Klocwork 不再于第 3 行和第 4 行报告 CXX.BITOP.NON_CONST_OPERAND 缺陷。