Possibly inappropriate data type for switch expression

switch выражение имеет тип данных, отличный от char, short, int или enum

Описание

Этот дефект возникает, когда switch выражение имеет тип данных, отличный от char, short, int или enum.

Проверка помечает другие целочисленные типы данных, такие как логические типы, битовые поля или long.

Риск

Предпочтительно использовать char, short, int или enum в switch выражения вместо:

  • Логические типы, потому что switch выражение с логическим типом можно заменить на if условие, которое оценивает то же выражение. A switch выражение слишком тяжелое для простого потока управления, основанного на логическом условии.

  • Типы битовых полей, поскольку типы битовых полей подразумевают ограничения памяти. Если вы просто хотите задать переменную с конечным количеством значений, перечисления предпочтительны, поскольку они включают более читаемый код.

  • Типы с размером более int потому что switch выражение, которое требует тип с размером более int подразумевает слишком много меток регистров и может быть изменен дизайн.

Нецелочисленные типы не поддерживаются в switch выражения.

Зафиксировать

Используйте переменные char, short, int или enum типы данных в switch выражения.

Примеры

расширить все

#ifndef __cplusplus
#include <stdbool.h>
#endif

void func(bool s) {
    switch(s) {
        case 0: //Perform some operation
        break;
        case 1: //Perform another operation
        break;
    }
}

В этом примере C++ шашка помечает использование bool переменная в switch выражение.

Коррекция - Использование if Условие вместо switch

Если на switch выражение действительно требует двух значений, используйте if вместо этого оператор.

#ifndef __cplusplus
#include <stdbool.h>
#endif


void func(bool s) {
    if(s) {
        //Perform some operation
        }
    else {
        //Perform another operation
        }
}
Коррекция - Используйте различные типы данных

Если вы ожидаете добавления дополнительных меток к switch позже используйте тип данных, который может включать большие значения.

void func(char s) {
    switch(s) {
        case 0: //Perform some operation
        break;
        case 1: //Perform another operation
        break;
        default: //Default behavior
    }
}

Информация о результатах

Группа: Хорошая практика
Язык: C | C++
По умолчанию: Off
Синтаксис командной строки : INAPPROPRIATE_TYPE_IN_SWITCH
Влияние: Низкое
Введенный в R2020a