MISRA C:2012 Rule 15.2

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

Описание

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

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

Объяснение

Неограниченное использование 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