繁体   English   中英

“ &&”或“ ||”的右操作数 是可能有副作用的表达

[英]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以识别这种情况。

当一个表达式出现副作用:

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

但是,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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM