C6237
C6237 Uyarı: (<zero> & & <expression>) her zaman sıfırdır.<expression> hiçbir zaman değerlendirilir ve yan etkileri olabilir
Bu uyarı sabit bir değer sıfır sol tarafında bir mantıksal algılandığını gösterir- ve test bağlamında oluşan işlem.Sonuçta elde edilen deyim her zaman false deðerini verir.Bu nedenle, sağ tarafında mantıksal- ve işlem değerlendirilir değildir.Bu "değerlendirme short-circuit." denir.
Dikkatle herhangi bir atama, işlev çağrısı gibi yan etkileri artırmak ve düzgün çalışması için gereken azaltma işlemleri etkilenmez emin olmak için deyimin sağındaki incelemelisiniz değerlendirme short-circuit.
İfade (0 && n) hiçbir yan etkileri üretir ve seçmeli olarak kod yolları seçmek için yaygın olarak kullanılır.
Örnek
Aşağıdaki kod, bu uyarı oluşturan çeşitli kod örnekleri gösterilmektedir:
#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);
}
}
Bu uyarı düzeltmek için şu kodu kullanın:
#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");
}
}