MISRA C:2012 Rule 16.5

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

Описание

Примечание

Используйте Bug Finder вместо Code Prover для проверки правил кодирования. Поддержка кодирования правил, регистрируясь в Code Prover будет удалена в будущем релизе. См. Вопросы совместимости.

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

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

Объяснение

Используя это правило, можно легко определить местоположение default пометьте в 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: консультация

Вопросы совместимости

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

Не рекомендуемый запуск в R2021b