MISRA C:2012 Rule 13.3

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

Описание

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

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

Объяснение

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

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

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

Например, линия 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++);           /* 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