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

Оператор перехода должен перейти к метке, объявленной позже в той же функции

Описание

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

Оператор перехода должен перейти к метке, объявленной позже в той же функции.

Объяснение

Неограниченное использование операторов goto делает программу неструктурированной и трудной понять. Можно использовать прямой оператор goto вместе с обратным, чтобы реализовать итерации. Ограничение обратных операторов goto гарантирует, что вы используете только операторы цикла, обеспеченные языком, такие как for или while, чтобы реализовать итерации. Это ограничение уменьшает визуальную сложность кода.

Обменивайтесь сообщениями в отчете

Оператор перехода должен перейти к метке, объявленной позже в той же функции.

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

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

развернуть все

void foo(void) {
    int i = 0, result = 0;

label1:
    for ( i; i < 5; i++ ) {
        if (i > 2) goto label2;   /* Compliant */
    }

label2: {
        result++;
        goto label1;               /* Non-compliant */
    }
}

В этом примере нарушено правило, когда оператор goto вызывает обратный скачок к label1.

Правило не нарушено, когда оператор goto вызывает прямой скачок к label2.

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

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

Введенный в R2014b