MISRA C++:2008 Rule 5-2-1

Каждый операнд логического & & или || должен быть постфиксным выражением

Описание

Определение правила

Каждый операнд логического & & или || должен быть постфиксным выражением.

Объяснение

Это правило эффективно требует, чтобы операнды логического && или || операция должна быть соответствующим образом установлена в круглые скобки. Для образца вместо a + b || cправило требует (a + b) || c или a + (b || c). В обоих соответствующих случаях левый операнд ||, то есть (a + b) или b, является первичным выражением, и, следовательно, также постфиксным выражением. Для получения дополнительной информации о постфиксных выражениях см. Стандарт C++ 03 (Раздел 5.2).

Добавление операндов в круглые скобки улучшает удобочитаемость кода и гарантирует, что операции происходят в том порядке, который намеревается сделать разработчик.

Реализация Polyspace

Шашка вызывает нарушение, если логический && или || операнд не является постфиксным выражением.

Постфиксное выражение может быть первичным выражением, таким как простой идентификатор или комбинация идентификаторов, заключенных в круглые скобки, но также одним из следующих:

  • Вызов функции, такой как func().

  • Доступ к элементу массива, такому как arr[].

  • Доступ к представителю структуры, такому как aStructVar.aMember.

Полный список постфиксных выражений см. в Стандарте C++ 03 (Раздел 5.2).

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

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

Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».

Примеры

расширить все

bool Operations(bool a, bool b, bool c, bool priority) {
    bool res;
    if(priority) {
        res = a && b || c;  //Noncompliant
    }
    else {
        res = a && (b || c); //Compliant
    }
    return res;
}

В этом примере выражение a && b || c нарушает правило, потому что правильный операнд && и левый операнд || не являются постфиксными выражениями.

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

Группа: Выражения
Категория: Требуемая
Введенный в R2013b