Partager via


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)