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" );
}
}