![](/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.