Правило 13.3 MISRA C:2012

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

Описание

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

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

Объяснение

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

  • Инкрементный или оператор понижения действует на переменную.

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

Например, строка y=x++ нарушает это правило. ++ и оператор = оба действия на 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++);
    if (choice == 0) {
        res = x++ + y++;
        return(res);           /* Non-compliant */
    }
    else if (choice == 1) {
        x++;                   /* Compliant */
        y++;                   /* Compliant */
        return (x+y);
    }
    else {
        res = operation(x++,y);
        return(res);           /* Non-compliant */
    }
}

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

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

Группа: побочные эффекты
Категория: консультация
Категория AGC: удобочитаемость
Язык: C90, C99

Введенный в R2014b