MISRA C:2012 Rule 16.5

Метка по умолчанию должна появиться или как первое или как последняя метка переключателя оператора 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