Avertissement C6236

('expression' || 'constante non nulle'') est toujours une constante non nulle

Cet avertissement indique qu’une valeur constante autre que zéro a été détectée sur le côté droit d’une opération OR logique qui se produit dans un contexte de test. Logiquement, cela implique que le test est redondant et peut être supprimé en toute sécurité. Il suggère également que le programmeur a peut-être prévu d’utiliser un autre opérateur, par exemple l’égalité (==), l’opérateur BITwise-AND (&) ou bitwise-XOR (^) pour tester une valeur ou un indicateur spécifique.

Notes

Cet avertissement n’est pas généré pour l’idiome commun lorsque la constante non nulle est 1, en raison de son utilisation pour activer sélectivement les chemins de code au moment de la compilation. Toutefois, l’avertissement est généré si la constante non nulle est formée par une expression qui prend la valeur 1, par exemple, 1 + 0.

Nom de l’analyse du code : LOGICALORNONZERO

Exemple

Ce code montre comment l’avertissement C6236 peut apparaître. Comme INPUT_TYPE n’est pas 0, l’expression n || INPUT_TYPE est toujours différente de zéro et la else clause n’est jamais exécutée. Toutefois, INPUT_TYPE est une constante avec une valeur autre qu’une autre, ce qui suggère qu’elle est conçue comme valeur de comparaison :

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

Le code suivant utilise à la place un opérateur BITwise-AND (&) pour tester si le INPUT_TYPE bit du paramètre n d’entrée est défini :

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

Voir aussi

Opérateur AND au niveau du bit : &