代码语句如下:
if((temp1 == ID1) || (temp2 == (C_UINT16) ID2))
{
}
我不确定为什么 QAC 会生成此警告。副作用是什么以及如何避免此警告。
QAC 帮助详细信息:
逻辑 && 运算符的右侧操作数仅在满足以下条件时才计算: 左侧操作数的计算结果为 1(“真”)。右手操作数 逻辑 ||仅当左侧操作数为 计算结果为 0(“假”)。
由于这种行为,如果右手 这些运算符的操作数都会产生副作用。信息 生成 3415 是为了识别这种情况。
当表达式出现以下情况时会产生副作用:
然而,QAC 假设每当函数被调用时就会出现副作用 被调用,除非该函数已被明确标识为 通过以下形式的 #pragma 语句避免副作用:
#pragma PRQA_NO_SIDE_EFFECTS funcname
查看变量 temp1 和 temp2。我知道它被声明为易失性的。将变量更改为正常非易失性后,不会出现警告。这是 QAC 的 4 级警告。
参考: https://cboard.cprogramming.com/c-programming/68666-strange-side-effects.html
解决错误的另一种方法是在再次执行操作之前再次读取 volatile 变量。