C6237
upozornění C6237: (<nulový> && <výraz>) je vždy nula. <výraz> nikdy není vyhodnocen a může mít vedlejší účinky
Toto upozornění signalizuje, že byl zjištěn konstantní hodnota nula na levé straně logické- a operaci, která probíhá v kontextu test.Vždy výsledný výraz vyhodnocen jako false.Proto pravé straně logický- a operace není vyhodnocena.To je označováno jako "zkrácené vyhodnocení."
Měli byste prozkoumat pravé straně výraz pečlivě, aby zajistily, že žádné vedlejší účinky, jako je například přiřazení, volání funkce, zvýšit a nejsou ovlivněny snižovat operace potřebné pro správnou funkci zkrat hodnocení.
Výraz (0 && n) vytváří žádné vedlejší účinky a běžně se používá pro selektivní výběr cest kódu.
Příklad
Následující kód ukazuje různé ukázky kódu, které generují upozornění:
#include <stdio.h>
#define INPUT_TYPE 0
int test();
// side effect: n not incremented
void f1( int n )
{
if(INPUT_TYPE && n++) //warning: 6237
{
puts("code path disabled");
}
else
{
printf_s("%d - n was not incremented",n);
}
}
// side effect: test() not called
void f2( )
{
if(INPUT_TYPE && test()) //warning: 6237
{
puts("code path disabled");
}
else
{
puts("test() was not called");
}
}
//side effect: assignment and function call did not occur
void f3( int n )
{
if(INPUT_TYPE && ( n=test() )) //warning: 6237
{
puts("code path disabled");
}
else
{
printf_s("%d -- n unchanged. test() was not called", n);
}
}
Pro opravu tohoto upozornění použijte následující kód:
#include <stdio.h>
#define INPUT_TYPE 0
int test();
void f1( int n )
{
if(INPUT_TYPE)
{
if(n++)
{
puts("code path disabled");
}
}
else
{
puts("n was not incremented");
}
}
void f2( )
{
if(INPUT_TYPE)
{
if( test() )
{
puts("code path disabled");
}
}
else
{
puts("test() was not called");
}
}
void f3( int n )
{
if(INPUT_TYPE)
{
n = test();
if( n )
{
puts("code path disabled");
}
}
else
{
puts("test() was not called");
}
}