exponenta event banner

Бесполезно, если

Ненужный, если условный

Описание

Этот дефект возникает на if- операторы, в которых условие всегда истинно. Этот дефект возникает только для операторов if, не имеющих операторов else.

Этот дефект не является необходимым if-statements, когда нет разницы в выполнении кода, если if-статия удалена.

Риск

Ненужный if операторы часто указывают на ошибку кодирования. Возможно, if состояние закодировано неправильно или if оператор не требуется вообще.

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

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

Часто детали результата показывают последовательность событий, которые привели к дефекту. Исправление может быть реализовано для любого события в последовательности. Если сведения о результатах не отображают историю событий, можно выполнить обратную трассировку, щелкнув правой кнопкой мыши параметры в исходном коде и просмотреть предыдущие связанные события. См. также раздел Интерпретация результатов поиска ошибок в интерфейсе пользователя Polyspace Desktop.

См. примеры исправлений ниже.

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

Примеры

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

typedef enum _suit {UNKNOWN_SUIT, SPADES, HEARTS, DIAMONDS, CLUBS} suit;
suit nextcard(void);
void do_something(suit s);

void bridge(void)
{
    suit card = nextcard();
    if ((card < SPADES) || (card > CLUBS)){
        card = UNKNOWN_SUIT;
    }

    if (card < 7) {
        do_something(card);
    }
}

Тип suit перечисляется с пятью параметрами. Однако условное выражение card < 7 всегда вычисляется как true, потому что card может быть не более 5. if инструкция не нужна.

Корректировка - изменение условия

Одной из возможных корректировок является изменение условия if в коде. В этой коррекции 7 изменяется на UNKNOWN_SUIT непосредственно относится к типу card.

typedef enum _suit {UNKNOWN_SUIT, SPADES, HEARTS, DIAMONDS, CLUBS} suit;
suit nextcard(void);
void do_something(suit s);

void bridge(void)
{
    suit card = nextcard();
    if ((card < SPADES) || (card > CLUBS)){
        card = UNKNOWN_SUIT;
    }

    if (card > UNKNOWN_SUIT) {
        do_something(card);
    }
}
Исправление - удалить, если

Другой возможной поправкой является удаление условия if в коде. Поскольку условие всегда соответствует действительности, его можно удалить, чтобы упростить код.

typedef enum _suit {UNKNOWN_SUIT, SPADES, HEARTS, DIAMONDS, CLUBS} suit;
suit nextcard(void);
void do_something(suit s);

void bridge(void)
{
    suit card = nextcard();
    if ((card < SPADES) || (card > CLUBS)){
        card = UNKNOWN_SUIT;
    }

    do_something(card);
}

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

Группа: Поток данных
Язык: C | C++
По умолчанию: Вкл.
Синтаксис командной строки: USELESS_IF
Воздействие: среднее
Представлен в R2013b