Avviso C6237
('zero' && 'expression') è sempre zero. 'expression' non viene mai valutato e può avere effetti collaterali
Questo avviso indica che è stato rilevato un valore costante pari a zero sul lato sinistro di un'operazione e logica che si verifica in un contesto di test. L'espressione risultante restituisce sempre false. Di conseguenza, il lato destro dell'operazione LOGICAL-AND non viene valutato. Questa funzionalità del linguaggio è definita "valutazione a corto circuito".
Osservazioni:
È consigliabile esaminare attentamente il lato destro dell'espressione: assicurarsi che eventuali effetti collaterali, ad esempio assegnazione, chiamata di funzione, incremento e decremento necessari per la funzionalità appropriata non siano interessati dalla valutazione del corto circuito.
L'espressione (0 && n
) non produce effetti collaterali e viene comunemente usata per scegliere in modo selettivo i percorsi di codice.
Nome dell'analisi del codice: ZEROLOGICALANDLOSINGSIDEEFFECTS
Esempio
Il codice seguente illustra vari esempi di codice che generano questo avviso:
#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);
}
}
Per correggere questo avviso, usare il codice seguente:
#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");
}
}
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per