AUTOSAR C++14 Rule A5-2-6

Операнды логического && или || буду заключен в скобки, если операнды будут содержать бинарных операторов

Описание

Управляйте определением

Операнды логического && или || буду заключен в скобки, если операнды будут содержать бинарных операторов.

Объяснение

В логическом выражении, содержащем бинарных операторов, используя результаты правил приоритета оператора C++ в коде, который сбивает с толку и затрудняет, чтобы понять. Этот код может привести к неожиданному поведению и ошибкам, которые затрудняют твердость. Заключение в скобки операндов, которые включают бинарных операторов, улучшает удобочитаемость кода, делает код легче рассмотреть и гарантирует, что поведение приоритета оператора как ожидалось.

Реализация Polyspace

Во время предварительной обработки нарушения этого правила обнаруживаются по выражениям в #if директивы.

Средство проверки позволяет исключения на ассоциативности (a && b && c), (a || b || c).

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, относитесь, чтобы Диагностировать, Почему Кодирующие Стандартные Нарушения Не Появляются как ожидалось.

Примеры

развернуть все

#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;
}

Существуют совместные использования logicals && и ||. В первых и третьих логических выражениях существуют операнды, содержащие бинарных операторов, которые не заключаются в скобки. Polyspace® отмечает их как несовместимых с этим правилом. Во вторых и четвертых логических выражениях заключаются в скобки все операнды, содержащие бинарных операторов. Polyspace не отмечает их как несовместимых с этим правилом.

Проверяйте информацию

Группа: Выражения
Категория: необходимый, автоматизированный
Введенный в R2019a