C6317
警告 C6317: 不適切な演算子です: 論理否定演算子は 1 の補数演算子 (~) と代替できません
この警告は、ビットフラグになると思われる定数に論理否定演算子 (!) が適用されることを示します。 論理否定演算子の結果はブール型です。ビットごとの AND (&) 演算子をブール値に適用することは不適切です。 1 の補数演算子 (~) を使用して、フラグを反転します。
使用例
この警告が発生するコード例を次に示します。
#define FLAGS 0x4004
void f(int i)
{
if (i & !FLAGS) // warning
{
// code
}
}
この警告を解決するには、次のコードを使用します。
#define FLAGS 0x4004
void f(int i)
{
if (i & ~FLAGS)
{
// code
}
}