Avertissement C6286

('constante non nulle' || 'expression') est toujours une constante non nulle. 'expression' n’est jamais évaluée et peut avoir des effets secondaires

Notes

Cet avertissement indique qu’une constante non nulle a été détectée sur le côté gauche d’une opération logique ou qui se produit dans un contexte de test. L’expression résultante prend toujours la valeur TRUE. En outre, le côté droit de l’expression semble avoir des effets secondaires, et ils seront perdus.

Vous pouvez examiner attentivement le côté droit de l’expression pour vous assurer que les effets secondaires nécessaires à une fonctionnalité appropriée ne sont pas perdus.

La (!0 || <expression>) construction est couramment utilisée pour forcer l’exécution d’un bloc contrôlé.

Nom de l’analyse du code : NONZEROLOGICALORLOSINGSIDEEFFECTS

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 montre une solution possible en cassant if l’instruction en 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...
  }
}

Voir aussi

Opérateur OU logique : ||