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