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

Voir aussi

Autres ressources

Opérateurs de bits C++ (éventuellement en anglais)