簡體   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