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

Ограниченная зависимость должна быть помещена в правила приоритета оператора C++ в выражениях

Описание

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

Ограниченная зависимость должна быть помещена в выражения в правилах приоритета оператора C++.

Объяснение

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

В зависимости от приоритета оператора могут возникнуть следующие проблемы:

  • Если вы или другой рецензент кода просматриваете код, предполагаемый порядок оценки не сразу ясен.

  • Вполне возможно, что результат оценки не соответствует вашим ожиданиям. Для образца:

    • В операции *p++Возможно, вы ожидаете, что разменяемое значение будет увеличено. Однако указатель p приращение перед разыменованием.

    • В операции (x == y | z)Возможно, что вы ожидаете x для сравнения с y | z. Однако == операция происходит перед | операция.

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

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

Примеры

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

#include <cstdio>

void showbits(unsigned int x) {
    for(int i = (sizeof(int) * 8) - 1; i >= 0; i--) {
       (x & 1u << i) ? putchar('1') : putchar('0'); // Noncompliant 
    }
    printf("\n");
}

В этом примере шашка помечает операцию x & 1u << i поскольку оператор полагается на правила приоритета операторов для << операция, которая произойдет перед & операция. Если это предполагаемый порядок, операция может быть переписана следующим x & (1u << i).

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

Группа: Выражения
Категория: Консультационные
Введенный в R2013b