C6286
Avertissement C6286 : (<constante non nulle> || <expression>) est toujours une constante non nulle.<expression> n'est jamais évalué et peut avoir des effets secondaires
Cet avertissement indique qu'une constante non nulle a été détectée sur le côté gauche d'une opération logique OR qui se produit dans un contexte de test.L'expression obtenue a toujours la valeur TRUE.De plus, le côté droit de l'expression semble avoir des effets secondaires, et ils seront perdus.
Cet avertissement indique que vous pouvez examiner attentivement le côté droit de l'expression pour vérifier que les effets secondaires nécessaires au bon fonctionnement ne sont pas perdus.
La construction (!0 || <expression>) est fréquemment utilisée pour forcer l'exécution d'un bloc contrôlé.
Exemple
Le code suivant génère cet avertissement :
#include <stdlib.h>
#include <stdio.h>
#define INPUT_TYPE 1
int test();
void f()
{
if (INPUT_TYPE || test())
{
puts("INPUT_TYPE == 1, expression not evaluated");
// code...
}
else
{
puts("INPUT_TYPE == 0. Call to test() returned 0");
// code...
}
}
Le code suivant présente une solution possible en bloquant l'instruction if dans deux parties distinctes :
#include <stdlib.h>
#include <stdio.h>
#define INPUT_TYPE 1
int test();
void f()
{
int i;
if (INPUT_TYPE)
{
i = test();
// code...
}
else
{
puts("INPUT_TYPE false");
// code...
}
}