このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
MISRA C++:2008 Rule 5-0-14
The first operand of a conditional-operator shall have type bool.
説明
ルール定義
The first operand of a conditional-operator shall have type bool. 1
根拠
非論理式を ?
演算子の最初のオペランドとして使用すると、式は暗黙的に bool
に変換されます。このような暗黙的な変換は開発者の意図を不明瞭にしたり、エラーを覆い隠したりして、診断するのが難しいバグにつながる可能性があります。次に例を示します。
int flag, val; //... flag= 1; val = (flag=0)?2:3;
flag = 0
が代入として意図されているのかどうかが明確ではありません。コンパイラは代入演算の戻り値を、?
演算子の条件として使用する bool
にキャストします。この場合、開発者の意図は flag
の値をテストすることである可能性もあります。val
が 3 になると想定していても、最初のオペランドでの暗黙的な bool
への変換により、2 になります。Polyspace 実装
Polyspace® は、非論理式が ?
演算子の最初の引数として使用されている場合に、このルールに対する違反を報告します。
トラブルシューティング
ルール違反が想定されるものの、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.