C6317
警告 C6317:运算符不正确: 逻辑非(!)与 1 的补数(~)不可互换
此警告意味着逻辑非 (!) 应用于可能是位标志的常数。 逻辑非的结果是布尔值;将按位与 (&) 运算符应用于布尔值是不正确的。 请使用按位求补 (~) 运算符来翻转标志。
示例
下面的代码生成此警告:
#define FLAGS 0x4004
void f(int i)
{
if (i & !FLAGS) // warning
{
// code
}
}
若要更正此警告,请使用下面的代码:
#define FLAGS 0x4004
void f(int i)
{
if (i & ~FLAGS)
{
// code
}
}