assert (CRT)

Ergibt einen Ausdruck aus, und wenn das Ergebnis ist false, gibt eine Diagnosemeldung und bricht das Programm ab.

void assert( 
   int expression 
);

Parameter

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

Hinweise

Das Makro assert wird in der Regel verwendet, um Logik- während der Programmentwicklung zu identifizieren, indem das Argument expression implementiert, um zu false auszuwerten, wenn das Programm nicht ordnungsgemäß funktioniert. Nachdem das Debuggen abgeschlossen ist, kann Assertionsüberprüfung deaktiviert werden, ohne die Quelldatei zu ändern, indem der Bezeichner NDEBUG definiert. NDEBUG kann mit einer Befehlszeilenoption /D oder mit #define-Direktive definiert werden. Wenn NDEBUG mit #define definiert wird, müssen die Direktive werden, bevor ASSERT.H enthalten ist.

assert gibt eine Diagnosemeldung, wenn expression auf false (0) ergibt und Abbruch aufruft, um die Programmausführung zu beenden. Keine Aktion ausgeführt werden, wenn expressiontrue (ungleich 0 (null) ist. Die Diagnosemeldung enthält den fehlgeschlagenen Ausdruck, den Namen der Quelldatei und Zeilennummer, in der die Assertion.

Die Diagnosemeldung wird den Breitzeichen gedruckt. Deshalb funktioniert sie erwartungsgemäß, selbst wenn ein Unicode-Zeichen im Ausdruck enthält.

Das Ziel der Diagnosemeldung hängt vom Typ der Anwendung ab, der die Routine aufrufen. Konsolenanwendungen erhalten die Meldung immer über stderr. In einer Windows-Anwendung ruft assert der Windows-Funktion MessageBox auf, um ein Meldungsfeld, um die Meldung mit einer Schaltfläche OK anzuzeigen. Wenn der Benutzer auf OK klickt, wird das Programm sofort beendet.

Wenn die Anwendung mit einer Debugversion der Laufzeitbibliotheken verknüpft ist, erstellt assert ein Meldungsfeld mit drei Schaltflächen: Abbrechen, Wiederholen und Ignorieren. Wenn der Benutzer auf Abbrechen klickt, wird das Programm sofort beendet. Wenn der Benutzer auf Wiederholen klickt, wird der Debugger aufgerufen und der Benutzer kann das Programm debuggen, wenn Just-In-Time (JIT)-Debuggen aktiviert ist. Wenn der Benutzer auf Ignorieren klickt, setzt assert die normale Ausführung fort und erstellt das Meldungsfeld mit der Schaltfläche OK. Beachten Sie auf Ignorieren klickendes das, wenn ein Fehlerzustand kann nicht definiertes Verhalten führen vorhanden ist.

Weitere Informationen über CRT-Debug, finden Sie unter CRT-Debug-Techniken.

Die Routine assert ist in der Version und die Debugversionen der C-Laufzeitbibliotheken verfügbar. Zwei andere Assertionsmakros, _ASSERT und _ASSERTE, sind auch verfügbar, sondern werden nur die Ausdrücke aus, die an sie übergebenen, 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 einige Bedingungen, die, um beziehen binären und Länge zu testen. Wenn eine der Bedingungen liegt, der Programmdruck ein Meldungsangeben aus, 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::Diagnostics::Debug::Assert

Siehe auch

Referenz

Fehlerbehandlung (CRT)

Prozess- und Umgebungssteuerung

abort

raise

signal

_ASSERT- und _ASSERTE-Makros

_DEBUG