![](/img/trans.png)
[英]The right hand operand of a logical operator || has persistent side effects because of calling function (MISRA- C 2012Rule 13.5)
[英]Right hand operand of '&&' or '||' is an expression with possible side effects
代码语句如下所示:
if((temp1 == ID1) || (temp2 == (C_UINT16) ID2))
{
}
我不确定QAC为什么会生成此警告。 会有什么副作用以及如何避免此警告。
QAC帮助的详细信息:
仅当左侧操作数的值为1(“ true”)时,才对逻辑&&运算符的右侧操作数求值。 逻辑||的右操作数 仅当左操作数的值为0(“假”)时,才对操作符进行求值。
由于这种行为,如果这些运算符之一的右手操作数产生副作用,可能会引起混乱。 生成消息3415以识别这种情况。
当一个表达式出现副作用:
但是,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变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.