C6317
Warnung C6317: Falscher Operator: Der logische Operator NOT (!) ist nicht mit dem Operator Einerkomplement (~) auswechselbar.
Diese Warnung gibt an, dass ein logischer Operator NOT (!) auf eine Konstante angewendet wird, bei der es sich wahrscheinlich um ein Bitflag handelt. Das Ergebnis der logischen NOT-Operation ist ein boolescher Wert. Der bitweise Operator AND (&) darf nicht auf einen booleschen Wert angewendet werden. Verwenden Sie den Operator Einerkomplement (~), um Bitwerte umzukehren.
Beispiel
Der folgende Code generiert diese Warnung:
#define FLAGS 0x4004
void f(int i)
{
if (i & !FLAGS) // warning
{
// code
}
}
So korrigieren Sie die Warnung unter Verwendung des folgenden Codes
#define FLAGS 0x4004
void f(int i)
{
if (i & ~FLAGS)
{
// code
}
}