Freigeben über


Warnung C6237

('null' && 'Ausdruck') ist immer Null. "Ausdruck" wird nie ausgewertet und kann Nebenwirkungen haben

Diese Warnung gibt an, dass auf der linken Seite eines logischen Vorgangs, der in einem Testkontext auftritt, ein konstanter Wert von Null erkannt wurde. Der resultierende Ausdruck wird immer als "false" ausgewertet. Daher wird die rechte Seite des logischen UND-Vorgangs nicht ausgewertet. Diese Sprachfunktion wird als "Kurzschlussauswertung" bezeichnet.

Hinweise

Sie sollten die rechte Seite des Ausdrucks sorgfältig untersuchen: Stellen Sie sicher, dass alle Nebenwirkungen wie Zuweisung, Funktionsaufruf, Inkrementierung und Dekrementierungsvorgänge, die für die ordnungsgemäße Funktionalität erforderlich sind, von der Kurzschlussauswertung nicht betroffen sind.

Der Ausdruck (0 && n) erzeugt keine Nebenwirkungen und wird häufig verwendet, um Codepfade selektiv auszuwählen.

Codeanalysename: ZEROLOGICALANDLOSINGSIDEEFFECTS

Beispiel

Der folgende Code zeigt verschiedene Codebeispiele, die diese Warnung generieren:

#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);
   }
}

So korrigieren Sie die Warnung unter Verwendung des folgenden Codes

#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");
   }
}

Siehe auch

C-Operatoren (logisch)