# V602. The '<' operator should probably be replaced with '<<'. Consider inspecting this expression.

Анализатор обнаружил потенциальную ошибку, которая может возникнуть из-за опечатки. Высока вероятность, что в выражении вместо оператора '<' должен использоваться оператор '<<'.

Рассмотрим пример кода.

    void Foo(unsigned nXNegYNegZNeg, unsigned nXNegYNegZPos,
             unsigned nXNegYPosZNeg, unsigned nXNegYPosZPos)
    {
      unsigned m_nIVSampleDirBitmask =
        (1 << nXNegYNegZNeg) | (1 <  nXNegYNegZPos) |
        (1 << nXNegYPosZNeg) | (1 << nXNegYPosZPos);
      ...
    }

Код содержит ошибку, так как случайно в выражении написан оператор '<'. Корректный вариант кода должен выглядеть так:

    unsigned m_nIVSampleDirBitmask =
      (1 << nXNegYNegZNeg) | (1 << nXNegYNegZPos) |
      (1 << nXNegYPosZNeg) | (1 << nXNegYPosZPos);

Примечание.

Анализатор считает подозрительными сравнения ('<', '>'), если полученный результат используется в двоичных операциях, таких как '&', '|' или '^'. Диагностика устроена более сложно, но надеемся, что общая идея понятна. Найдя такие выражения, анализатор выдает предупреждение V602.

Если анализатор выдает ложное срабатывание, то вы можете подавить его, используя комментарий "//-V602". Но чаще всего, этот код лучше переписать. С выражениями, которые имеют тип 'bool' лучше не работать, используя двоичные операторы. Это делает код неочевидным и затрудняет его чтение.

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

CWE-480

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