C6317
Предупреждение C6317: неверный оператор. Логическое отрицание (!) не является взаимозаменяемым с дополнением до единицы (~).
Данное предупреждение состоит в том, что оператор логического НЕ (!) применяется к константе, которая, вероятно, является битовым флагом. Результат оператора логического НЕ принадлежит типу Boolean; неверно применять оператор побитового И (&) к значению типа Boolean. Для отражения флагов следует использовать оператор дополнения до единицы (~).
Пример
Данное предупреждение создается в следующем коде:
#define FLAGS 0x4004
void f(int i)
{
if (i & !FLAGS) // warning
{
// code
}
}
Для устранения этого предупреждения используйте следующий код:
#define FLAGS 0x4004
void f(int i)
{
if (i & ~FLAGS)
{
// code
}
}