# V6057. Consider inspecting this expression. The expression is excessive or contains a misprint.

Анализатор обнаружил избыточное сравнение, которое может быть потенциальной ошибкой.

Поясним на простом примере:

    if (arr[42] == 10 && arr[42] != 3)

Условие будет выполнено в том случае, если 'Aa[42] == 10'. Вторая часть выражения бессмысленна. Проанализировав код, можно прийти к одному из двух выводов:

1) Выражение можно упросить. Исправленный код:

    if (arr[42] == 10)

2) Выражение содержит ошибку. Исправленный код:

    if (arr[42] == 10 && arr[43] != 3)

Рассмотрим еще пример с условием, которое вызывает подозрение:

    if ((3 < value) && (value > 10))

Условие выполнится только тогда, когда 'value > 10'. Скорее всего это будет означать ошибку, и подразумевалось, что 'value' примет значение в интервале (3;10):

    if ((3 < value) && (value < 10))

Статья, в которой рассмотрены подобные ситуации и даны советы, как избежать таких ошибок: "Логические выражения в C/C++. Как ошибаются профессионалы".

Данная диагностика классифицируется как:

CWE-571 CERT-MSC57-J