C6317
Обновлен: Ноябрь 2007
C6317
Предупреждение C6317. Некорректный оператор: оператор "логическое не" (!) не взаимозаменяем с оператором "дополнение 1" (~)
Данное предупреждение состоит в том, что оператор логического НЕ (!) применяется к константе, которая, вероятно, является битовым флагом. Результат оператора логического НЕ принадлежит типу 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
}
}