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

Метка по умолчанию должна появиться или как первое или как последняя метка переключателя оператора switch

Описание

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

Метка по умолчанию должна появиться или как первое или как последняя метка переключателя оператора switch.

Объяснение

Используя это правило, можно легко определить местоположение метки default в операторе switch.

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

Метка по умолчанию должна появиться или как первое или как последняя метка переключателя оператора switch.

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

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

Примеры

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

void foo(int var){

    switch(var){
        default:   /* Compliant - default is the first label */
        case 0:
            ++var;
            break;
        case 1:
        case 2:
            break;
    }
        
    switch(var){
        case 0:
            ++var;
            break;
        default:    /* Non-compliant - default is mixed with the case labels */
        case 1:
        case 2:
            break;
    }
    
    switch(var){
        case 0:
            ++var;
            break;
        case 1:
        case 2:
        default:     /* Compliant - default is the last label */
            break;
    }
    
    switch(var){
        case 0:
            ++var;
            break;
        case 1:
        case 2:
            break;
        default:      /* Compliant - default is the last label */
            var = 0;
            break;
    }
}

Этот пример несколько раз показывает тот же оператор switch, каждого с default в различном месте. Когда первые, третьи, и четвертые операторы switch показывают, default должен быть первой или последней меткой. default может быть частью составного пункта переключателя (например, третий пример switch), но это должно быть перечисленное последнее.

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

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