メインコンテンツ

AUTOSAR C++14 Rule A5-2-6

The operands of a logical && or || shall be parenthesized if the operands contain binary operators

説明

ルール定義

The operands of a logical && or || shall be parenthesized if the operands contain binary operators.

根拠

二項演算子を含み、C++ 演算子の優先順位のルールに依存する論理式では、混乱を招く可能性のある、理解しにくいコードが生成されます。このコードは、予期せぬ動作と解決が難しいバグにつながる可能性があります。二項演算子を含むオペランドを小かっこで囲むと、コードが読みやすくなってレビューも容易になり、演算子の優先順位の動作が必ず予期されたとおりになります。

Polyspace 実装

前処理時に、#if 命令の式でこのルールの違反が検出されます。

チェッカーは、結合性 (a && b && c)(a || b || c) の例外を許容します。

トラブルシューティング

ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。

すべて展開する

#include <cstdint>

void Fn(std::int32_t value) noexcept
{
  if (value > 1 && value < 2) { //Noncompliant
    // do some work
  } else if ((value > 0) && (value < 3)) { //Compliant
    // do some work
  } else if ((value == 0) || value == 3) { //Noncompliant
    // do some work
  } else if ((value < 0) || (value == 4)) { //Compliant
    // do some work
  } else {
    // do some work
  }
 
  return;
}

論理演算子 &&|| が複数使用されています。1 番目と 3 番目の論理式には、小かっこで囲まれていない二項演算子を含むオペランドがあります。Polyspace は、このルールに非準拠であるとして、これらに対してフラグを設定します。2 番目と 4 番目の論理式では、すべてのオペランドに小かっこで囲まれた二項演算子が含まれています。Polyspace は、このルールに非準拠であるとして、これらに対してフラグを設定することはありません。

チェック情報

グループ:
カテゴリ: Required、Automated

バージョン履歴

R2019a で導入

すべて展開する