代码声明如下所示:
if((temp1 == ID1) || (temp2 == (C_UINT16) ID2))
{
}
我不确定QAC为何会产生此警告。什么是副作用&如何避免这种警告。
QAC-help的详细信息:
逻辑&&amp ;;的右手操作数。运算符仅在评估时进行评估 左手操作数的计算结果为1(" true")。右手操作数 一个逻辑||只有左手操作数才会计算运算符 评估为0(" false")。
由于这种行为,如果右手可能会产生混淆 这些运算符中任何一个的操作数都会产生副作用。信息 生成3415以识别这种情况。
表达式时出现副作用:
然而,QAC假定每当函数出现副作用时 被称为,除非该功能已被特别识别为 通过表格的#pragma声明免于副作用:
#pragma PRQA_NO_SIDE_EFFECTS funcname
答案 0 :(得分:0)
在观察变量temp1& TEMP2。我知道它被宣布为挥发性的。将变量更改为正常非易失性后,不会发出警告。这是QAC的4级警告。
参考: https://cboard.cprogramming.com/c-programming/68666-strange-side-effects.html
在再次执行操作之前解决错误以再次读取volatile变量的另一种方法。