Freigeben über


Warnung C6236

('Ausdruck' || 'Nicht-Nullkonstante') ist immer eine Konstante ungleich Null.

Diese Warnung gibt an, dass auf der rechten Seite eines logischen OR-Vorgangs, der in einem Testkontext auftritt, ein nicht null konstanter Wert erkannt wurde. Logisch bedeutet dies, dass der Test redundant ist und sicher entfernt werden kann. Alternativ empfiehlt es sich, dass der Programmierer möglicherweise einen anderen Operator verwenden soll, z. B. den Gleichheitsoperator (==), bitweise-AND (&) oder bitweise-XOR (^) zum Testen eines bestimmten Werts oder Flags.

Hinweise

Diese Warnung wird für den allgemeinen Idiom nicht generiert, wenn die Nicht-Null-Konstante 1 ist, da sie zur Kompilierungszeit selektiv Codepfade aktiviert. Die Warnung wird jedoch generiert, wenn die Konstante ungleich Null durch einen Ausdruck gebildet wird, der als 1 ausgewertet wird, z. B. 1 + 0.

Codeanalysename: LOGICALORNONZERO

Beispiel

Dieser Code zeigt, wie die Warnung C6236 angezeigt werden kann. Da INPUT_TYPE nicht 0 ist, ist der Ausdruck n || INPUT_TYPE immer ungleich Null, und die else Klausel wird nie ausgeführt. Es handelt sich jedoch um eine Konstante mit einem anderen Wert als einem, was darauf hindeutet, INPUT_TYPE dass sie als Vergleichswert gedacht ist:

#define INPUT_TYPE 2
#include <stdio.h>

void f( int n )
{
   if ( n || INPUT_TYPE ) // analysis warning C6236
   {
      puts( "Always gets here" );
   }
   else
   {
      puts( "Never enters here" );
   }
}

Der folgende Code verwendet stattdessen einen bitweisen AND (&)-Operator, um zu testen, ob das INPUT_TYPE Bit des Eingabeparameters n festgelegt ist:

#define INPUT_TYPE 2
#include <stdio.h>

void f( int n )
{
   if ( n & INPUT_TYPE ) // no warning
   {
      puts( "Bitwise-AND comparison is true" );
   }
   else
   {
      puts( "Bitwise-AND comparison is false" );
   }
}

Siehe auch

Bitweise UND-Operator: &