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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour