C6236
avertissement C6236 : (<expression> || <constante non nulle>) est toujours une constante non nulle
Cet avertissement indique qu'une valeur de constante non nulle, autre que 1, a été détectée sur le côté droit d'une opération logique OR qui se produit dans un contexte de test.Le côté gauche de l'opération logique OR n'est pas évalué car l'expression obtenue a toujours la valeur True.C'est ce qu'on appelle une « évaluation de court-circuit ».
Une valeur de constante autre que 1 suggère que l'opérateur de bits AND (&) a pu être utilisé.Cet avertissement n'est pas généré pour l'idiome commun lorsque la constante non nulle est égale à 1, en raison de son utilisation pour activer de manière sélective les chemins d'accès de code, mais il est généré si la constante non nulle est égale à 1, par exemple 1+0.
Exemple
Dans le code suivant, n++ n'est pas évalué car INPUT_TYPE est supérieur à 1 :
#define INPUT_TYPE 2
#include <stdio.h>
void f( int n )
{
// side effect: n not incremented
if( n++ || INPUT_TYPE ) //warning 6236 issued
{
puts( "Always gets here" );
}
else
{
puts( "Never enters here" );
}
}
Le code suivant utilise l'opérateur de bits AND (&)) pour corriger cet avertissement :
#define INPUT_TYPE 2
#include <stdio.h>
void f( int n )
{
if( n++ & INPUT_TYPE )
{
puts( "Bitwise-AND comparison is true" );
}
else
{
puts( "Bitwise-AND comparison is false" );
}
}