# V616. Use of 'Foo' named constant with 0 value in bitwise operation.

Анализатор обнаружил использование нулевой константы в битовой операции И ( & ). Результатом такого выражения всегда будет нулевое значение. Это может привести к неправильной логике работы программы, если такое выражение используется в условиях или циклах.

Рассмотрим простейший пример:

    enum { FirstValue, SecondValue };
    int Flags = GetFlags();
    if (Flags & FirstValue)
    {...}

Выражения в условии оператора 'if' всегда равно нулю. Это приводит к неверной логике выполнения программы. Как правило, ошибки использования нулевых констант в битовых операциях, возникают из-за опечаток или некорректного объявления констант. Например, может оказаться, что в этом месте следовало использовать другую константу. Корректный вариант кода:

    enum { FirstValue, SecondValue };
    int Flags = GetFlags();
    if (Flags & SecondValue)
    {...}

Так же корректным может быть вариант, когда константа будет объявлена ненулевой. Пример кода:

    enum { FirstValue = 1, SecondValue };
    int Flags = GetFlags();
    if (Flags & FirstValue)
    {...}

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

CWE-480

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