メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

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 から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。

すべて展開する

void foo()
{
    int val, flag;
    flag = 0;
    val = (flag = 0) ? 2 : 3;//Noncompliant
    val = (flag==0)? 2:3; //Compliant
}

この例では、Polyspace は、? 演算子の最初の引数として使用されている非論理式 flag = 0 にフラグを設定します。

チェック情報

グループ: 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.