Udostępnij za pośrednictwem


C6286

ostrzeżenie C6286: (<non-zero constant> || <expression>) jest zawsze stałą niezerową.<expression> nigdy nie jest oszacowane i może mieć skutki uboczne

To ostrzeżenie wskazuje, że po lewej stronie operacji logicznej Or wykryto stałą niezerową, która występuje w kontekście badania.Wyrażenie wynikowe zawsze będzie prawdziwe.Ponadto, prawa strona wyrażenia wydaje się mieć skutki uboczne i będą one utracone.

To ostrzeżenie wskazuje, że warto zbadać uważnie prawą stronę wyrażenia, aby zapewnić, że wszelkie skutki uboczne, niezbędne dla prawidłowego działania, nie zostaną utracone.

Konstrukcja (!0 || <expression>) jest powszechnie stosowana aby wymusić kontrolowane wykonanie bloku.

Przykład

Poniższy kod generuje to ostrzeżenie:

#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...
  }
}

Poniższy kod przedstawia możliwe rozwiązanie przez podział instrukcji if na dwie oddzielne części:

#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...
  }
}

Zobacz też

Informacje

Logiczne lub operatora: ||