V793. It is odd that the result of the statement is a part of the condition. Perhaps, this statement should have been compared with something else.


Анализатор обнаружил возможную опечатку в логическом выражении. В качестве условного выражения используется арифметическая операция.

Пример:

int a;
int b;
if (a + b) {}

Несмотря на то, что поведение такого кода может быть понятно его автору, лучше использовать явные проверки. Такой код аналогичен 'a + b != 0'. Человек, который будет читать и сопровождать этот код, постоянно будет задавать себе вопрос: "А не забыли ли сравнить с чем-то полученную сумму?". Возможно, результат операции хотели сравнить с некой константой, например, 42, и корректный код должен был быть таким:

if (a + b == 42) {}

Пример из кода реального проекта:

// verify that time is well formed
if ( ( hh / 24 ) || ( mm / 60 ) ) {
  return false;
}

Код работает, как и задумывалось. Но он бы выглядел намного понятнее, если бы использовались операции сравнения.

// verify that time is well formed
if ( hh >= 24 || mm >= 60 ) {
  return false;
}

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V793.


Найденные ошибки

Проверено проектов
367
Собрано ошибок
13 552

А ты совершаешь ошибки в коде?

Проверь с помощью
PVS-Studio

Статический анализ
кода для C, C++, C#
и Java

goto PVS-Studio;