exponenta event banner

MISRA C:2012 Правило 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