代码语句如下所示:
if((temp1 == ID1) || (temp2 == (C_UINT16) ID2))
{
}
我不确定QAC为什么会生成此警告。会有什么副作用以及如何避免此警告。
QAC帮助的详细信息:
仅在以下情况下评估逻辑&&运算符的右侧操作数
左侧操作数的值为1(“真”)。右手操作数
逻辑||仅当左侧操作数为时才对运算符进行求值
计算结果为0(“假”)。
由于这种行为,如果右手会产生混乱
这些运算符之一的操作数都会产生副作用。信息
生成3415以识别这种情况。
当一个表达式出现副作用:
访问一个易失的对象
执行增量,减量,赋值或复合赋值
操作
执行I / O或
调用执行上述任何一项功能
但是,QAC假定每当有功能
调用,除非已明确确定该功能为
通过以下形式的#pragma语句消除副作用:
#pragma PRQA_NO_SIDE_EFFECTS funcname
最佳答案
同时查看变量temp1和temp2。我知道它被声明为volatile。将变量更改为正常的非易失性后,未观察到警告。这是QAC中的第4级警告。
参考:
https://cboard.cprogramming.com/c-programming/68666-strange-side-effects.html
解决错误的另一种方法是在再次执行操作之前再次读取volatile变量。
关于c - “&&”或“||”的右手操作数是可能有副作用的表达,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46664411/