# V793. It is suspicious 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;
    }

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

CWE-691 CERT-INT31-C

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