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: консультация
Введенный в R2014b