MISRA C++:2008 Rule 5-14-1
The right hand operand of a logical && or || operator shall not contain side effects.
説明
ルール定義
The right hand operand of a logical && or || operator shall not contain side effects. 1
根拠
評価されると、二次的影響のある式はその式内の 1 つ以上の変数を変更します。たとえば、n++ は二次的影響のある式です。
以下の右側のオペランドについて:
論理
&&演算子の場合は、左側のオペランドが true に評価された場合にのみ評価されます。論理
||演算子の場合は、左側のオペランドが false に評価された場合にのみ評価されます。
その他の場合は、右側のオペランドが評価されないため、式の二次的影響が及びません。プログラムが二次的影響に依存している場合は、予期せぬ結果が生じる可能性があります。
Polyspace 実装
チェッカーは、右側のオペランドが二次的影響を含む式となっている論理的な && 演算子または || 演算子にフラグを設定します。Polyspace® は次のように仮定します。
変数を 1 つ以上変更する式には二次的影響が含まれる。
宣言されているが定義されていない明示的なコンストラクターまたは変換関数には、二次的影響は含まれない。定義されている変換関数には、二次的影響が含まれる。
volatile アクセスと関数呼び出しには二次的影響が含まれない。
トラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: Expressions |
| カテゴリ: 必要 |
バージョン履歴
R2013b で導入
1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.
The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:
MISRA C:2004
MISRA C:2012
MISRA C:2023
MISRA C++:2008
MISRA C++:2023
MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.