'&&'的右手操作数或者' ||'是一种可能有副作用的表达

时间:2017-10-10 10:26:15

标签: c warnings compiler-warnings suppress-warnings qa-c

代码声明如下所示:

if((temp1 == ID1) || (temp2 == (C_UINT16) ID2))
{

}

我不确定QAC为何会产生此警告。什么是副作用&如何避免这种警告。

QAC-help的详细信息:

  

逻辑&&amp ;;的右手操作数。运算符仅在评估时进行评估   左手操作数的计算结果为1(" true")。右手操作数   一个逻辑||只有左手操作数才会计算运算符   评估为0(" false")。

     

由于这种行为,如果右手可能会产生混淆   这些运算符中任何一个的操作数都会产生副作用。信息   生成3415以识别这种情况。

     

表达式时出现副作用:

  1. 访问易失性对象
  2. 执行递增,递减,赋值或复合赋值 操作
  3. 执行I / O或
  4. 调用上述任何一项功能
  5.   

    然而,QAC假定每当函数出现副作用时   被称为,除非该功能已被特别识别为   通过表格的#pragma声明免于副作用:

    #pragma PRQA_NO_SIDE_EFFECTS funcname
    

1 个答案:

答案 0 :(得分:0)

在观察变量temp1& TEMP2。我知道它被宣布为挥发性的。将变量更改为正常非易失性后,不会发出警告。这是QAC的4级警告。

参考: https://cboard.cprogramming.com/c-programming/68666-strange-side-effects.html

在再次执行操作之前解决错误以再次读取volatile变量的另一种方法。