(0) exportieren Drucken
Alle erweitern
and
Uhr
div
eof
not
or
xor
Erweitern Minimieren
Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

assert (CRT)

Wertet einen Ausdruck aus, wenn das Ergebnis false ist, wird eine Diagnosemeldung ausgegeben und das Programm abgebrochen.

void assert( 
   int expression 
);

expression

Ausdruck (einschließlich Zeiger), dessen Auswertung 0 oder einen Wert ungleich 0 ergibt.

Das assert Makro wird normalerweise verwendet, um logische Fehler bei der Programmentwicklung zu entdecken, indem das Argument expression so gewählt wird, dass seine Auswertung nur dann false ergibt, wenn das Programm nicht ordnungsgemäß funktioniert. Nachdem das Debuggen abgeschlossen ist, können die Assertions deaktiviert werden, ohne die Quelldatei zu ändern, indem Sie den Bezeichner NDEBUG definieren. NDEBUG kann mit einer /D Befehlszeilenoption oder mit der #define-Direktive definiert sind. Wenn NDEBUG mit #define definiert wird, muss die Direktive vor dem Inkludieren von ASSERT.H angegeben werden.

Wenn die Auswertung von expressionfalse (0) ergibt, gibt assert eine Diagnosemeldung aus und ruft Abbruch, um die Programmausführung zu beenden. Es werden keine Aktionen ausgeführt werden, wenn expressiontrue (ungleich 0) ist. Die Diagnosemeldung enthält den fehlgeschlagenen Ausdruck, den Namen der Quelldatei sowie die Zeilennummer der fehlgeschlagenen Assertion.

Die Diagnosemeldung wird den Breitzeichen gedruckt. Deshalb funktioniert sie erwartungsgemäß, auch wenn expression Unicode-Zeichen enthält.

Das Ziel der Diagnosemeldung hängt vom Typ der Anwendung ab, die die Routine aufgeruft. Konsolenanwendungen erhalten die Meldung immer über stderr. In einer Windows-basierten Anwendung ruft die assert die Windows MessageBox-Funktion auf, um eine MessageBox anzuzeigen, die die Meldung zusammen mit einer OK-Schaltfläche anzeigt. Wenn der Benutzer auf OK klickt, bricht das Programm sofort ab.

Wenn die Anwendung mit einer Debugversion der Laufzeitbibliotheken verknüpft ist, erzeugt assert ein Meldungsfeld mit drei Schaltflächen: Abbrechen, Wiederholen und Ignorieren. Wenn der Benutzer auf Abbrechen klickt, bricht das Programm sofort ab. Wenn der Benutzer auf Wiederholen klickt, wird der Debugger aufgerufen und der Benutzer kann das Programm debuggen, wenn just-in-time Debugging (JIT) aktiviert ist. Wenn der Benutzer auf Ignorieren klickt, setzt assert die normale Ausführung fort: Es wird ein Meldungsfeld mit der OK Schaltfläche erzeugt. Beachten Sie, dass in einem Fehlerzustand das Klicken auf Ignorieren ein undefiniertes Verhalten zur Folge haben kann.

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

Die assert-Routine ist sowohl in den Release- als auch der Debugversionen der C-Laufzeitbibliotheken verfügbar. Zwei weitere Assertions-Makros, _ASSERT und _ASSERTE, sind ebenfalls verfügbar; sie werten die ihnen übergebenen Ausdrücke aber nur dann aus, wenn das Flag _DEBUG definiert ist.

Routine

Erforderlicher Header

assert

<assert.h>

In diesem Programm verwendet die analyze_string-Funktion die assert-Funktion, um mehrere Bedingungen zur Länge der Zeichenfolge zu testen. Wenn eine der Bedingungen fehlschlägt, gibt das Programm eine Meldungen mit der Fehlerursache aus.

// 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
}
Zeichenfolge "abc" analysieren
Zeichenfolge analysieren "(NULL)"
Assertion verlassen: Zeichenfolge! = NULL, Datei crt_assert.c, Zeile 24

Diese Anwendung hat ein nicht ordnungsgemäßes Beenden der Runtime angefordert.
Weitere Informationen erhalten Sie von dem für die Anwendung zuständigen Supportteam.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft