Анализатор обнаружил избыточное сравнение, которое может быть потенциальной ошибкой.
Поясним на простом примере:
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++. Как ошибаются профессионалы".
Данная диагностика классифицируется как:
|