代码语句如下所示:
if((temp1 == ID1) || (temp2 == (C_UINT16) ID2))
{
}
我不确定 QAC 为什么会生成此警告。会有什么副作用以及如何避免此警告。
QAC 帮助的详细信息:
仅当左侧操作数的计算结果为 1(“真”)时,才会计算逻辑 && 运算符的右侧操作数。逻辑 || 的右手操作数 仅当左侧操作数的计算结果为 0(“假”)时才计算运算符。
由于这种行为,如果这些运算符中的任何一个的右手操作数产生副作用,就会产生混淆。生成消息 3415 以识别这种情况。
当表达式出现副作用时:
- 访问 volatile 对象
- 执行递增、递减、赋值或复合赋值操作
- 执行 I/O 或
- 调用执行上述任何操作的函数
然而,QAC 假定每当调用函数时都会发生副作用,除非该函数已通过以下形式的 #pragma 语句明确标识为没有副作用:
#pragma PRQA_NO_SIDE_EFFECTS funcname