exponenta event banner

MISRA C:2012 Правило 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 операция.

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

Группа: Побочные эффекты
Категория: Консультационные услуги
Категория СМЖЛ: удобочитаемость
Представлен в R2014b