MISRA C:2012 Rule 15.2

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

Описание

Определение правила

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

Объяснение

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

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

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