MISRA C:2012 Rule 13.3

Полное выражение, содержащее оператор шага (+ +) или декремента (--), не должно иметь других потенциальных побочных эффектов, кроме тех, которые вызваны оператором шага или декремента

Описание

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

Полное выражение, содержащее оператор шага (+ +) или декремента (--), не должно иметь других потенциальных побочных эффектов, кроме тех, которые вызваны оператором шага или декремента.

Объяснение

Правило нарушается, если в одной строке кода происходит следующее:

  • Оператор шага или декремента действует на переменную.

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

Для примера, линия y=x++ нарушает это правило. The ++ и = оба оператора действуют на x.

Хотя правила приоритета операторов определяют порядок оценки, помещая ++ и другой оператор в той же линии может уменьшить читаемость кода.

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

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

Примеры

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

int input(void);
int choice(void);
int operation(int, int);

int func() {
    int x = input(), y = input(), res;
    int ch = choice();
    if (choice == -1)
        return(x++);           /* Non-compliant */
    if (choice == 0) {
        res = x++ + y++;           /* Non-compliant */
        return(res);
    }
    else if (choice == 1) {
        x++;                   /* Compliant */
        y++;                   /* Compliant */
        return (x+y);
    }
    else {
        res = operation(x++,y);           /* Non-compliant */
        return(res);
    }
}

В этом примере правило нарушается, когда выражения, содержащие ++ оператор имеет побочные эффекты кроме вызванных оператором. Для примера в выражении return(x++), другой побочный эффект является return операция.

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

Группа: Побочные эффекты
Категория: Консультационные
Категория AGC: Читаемость
Введенный в R2014b