Assertion (CRT)

Wertet einen Ausdruck aus, wenn das Ergebnis ist false, druckt die Diagnosemeldung und das Programm ab.

void assert( 
   int expression 
);

Parameter

  • expression
    Ausdruck (einschließlich Zeiger) bis der Wert ungleich 0 oder 0 ergibt.

Hinweise

Das assert Makro wird normalerweise verwendet, um logische Fehler bei der Programmentwicklung zu kennzeichnen, indem Sie das Argument expression implementiert, um false nur ausgewertet, wenn das Programm nicht ordnungsgemäß funktioniert.Nachdem das Debuggen abgeschlossen ist, kann die Assertions deaktiviert werden, ohne die Quelldatei ändern, indem Sie den Bezeichner NDEBUGdefiniert.NDEBUG kann mit einer /D Befehlszeilenoption oder mit #define-Direktive definiert sind.Wenn NDEBUG mit #definedefiniert ist, müssen die Direktive angegeben werden, bevor ASSERT.H enthalten ist.

assert gibt eine expression Diagnosemeldung, wenn auf false (0) ausgewertet wird und Abbruch aufruft, um die Programmausführung zu beenden.Es werden keine Aktionen ausgeführt werden, wenn expression ( true-Wert ungleich 0 (null) ist.Die Diagnosemeldung den fehlgeschlagenen Ausdruck enthält den Namen der Quelldatei sowie die Zeilennummer in der fehlgeschlagenen Assertion.

Die Diagnosemeldung wird in Breitzeichen gedruckt.Deshalb funktioniert sie erwartungsgemäß, auch wenn diese Unicode-Zeichen im Ausdruck gibt.

Das Ziel der Nachricht Diagnose hängt vom Typ der Anwendung, der die Routine aufgerufen hat.Konsolenanwendungen erhalten immer durch die Nachricht stderr.In einer Windows-basierten Anwendung ruft die assert Windows MessageBox-Funktion auf, um eine Meldung zu erstellen, um die Nachricht zusammen mit einer OK Schaltfläche anzuzeigen.Wenn der Benutzer auf OKklickt, das Programm abbrüche sofort.

Wenn die Anwendung mit einer Debugversion der Laufzeitbibliotheken verknüpft ist, stellt assert ein Meldungsfeld mit drei Schaltflächen erstellt: Abbrechen, Wiederholenund Ignorieren.Wenn der Benutzer auf Abbrechenklickt, das Programm abbrüche sofort.Wenn der Benutzer auf Wiederholenklickt, wird der Debugger aufgerufen und der Benutzer kann das Programm debuggen, wenn rechtzeitiges Debuggen (Just-In-Time) aktiviert ist.Wenn der Benutzer auf Ignorierenklickt, wird assert mit ihrer normalen Ausführung fort: das Meldungsfeld mit der OK Schaltfläche erstellen.Beachten Sie, dass auf Ignorieren klickt, wenn ein Fehlerzustand nicht definiertes Verhalten zur Folge haben kann.

Weitere Informationen zu CRT-Debug finden Sie unter CRT-Debug-Techniken.

Die Version ist in der Routine assert und Debugversionen der C-Laufzeitbibliotheken verfügbar.Zwei weitere Assertions _ASSERT von Makros und _ASSERTE, sind ebenfalls verfügbar, sondern nur die Werte aus Ausdrücken, die an sie übergeben werden, wenn das Flag _DEBUG definiert wurde.

Anforderungen

Routine

Erforderlicher Header

assert

<assert.h>

Beispiel

In diesem Programm verwendet die analyze_string-Funktion die assert-Funktion, um mehrere Bedingungen zu testen, die mit der Zeichenfolge und der Länge.Wenn eine der Bedingungen, schlägt das Programm druckt Meldungen angeben, was den Fehler verursacht hat.

// crt_assert.c
// compile with: /c
#include <stdio.h>
#include <assert.h>
#include <string.h>

void analyze_string( char *string );   // Prototype

int main( void )
{
   char  test1[] = "abc", *test2 = NULL, test3[] = "";

   printf ( "Analyzing string '%s'\n", test1 ); fflush( stdout );
   analyze_string( test1 );
   printf ( "Analyzing string '%s'\n", test2 ); fflush( stdout );
   analyze_string( test2 );
   printf ( "Analyzing string '%s'\n", test3 ); fflush( stdout );
   analyze_string( test3 );
}

// Tests a string to see if it is NULL, 
// empty, or longer than 0 characters.
void analyze_string( char * string )
{
   assert( string != NULL );        // Cannot be NULL
   assert( *string != '\0' );       // Cannot be empty
   assert( strlen( string ) > 2 );  // Length must exceed 2
}
  
  

.NET Framework-Entsprechung

System::Diagnose::Debuggen::Assert

Siehe auch

Referenz

Fehlerbehandlung (CRT)

Prozess- und Umgebungssteuerelement

Abbruch

Erhöhen

Signal

_ASSERT, _ASSERTE Makros

_DEBUG