assert-Makro, _assert, _wassertassert Macro, _assert, _wassert

Wertet einen Ausdruck aus und gibt, wenn das Ergebnis falseist, eine Diagnose Meldung aus und bricht das Programm ab.Evaluates an expression and, when the result is false, prints a diagnostic message and aborts the program.

SyntaxSyntax

assert(
   expression
);
void _assert(
   char const* message,
   char const* filename,
   unsigned line
);
void _wassert(
   wchar_t const* message,
   wchar_t const* filename,
   unsigned line
);

ParameterParameters

expressionexpression
Ein skalarer Ausdruck (einschließlich Zeiger Ausdrücken), der zu ungleich NULL (true) oder 0 (false) ausgewertet wird.A scalar expression (including pointer expressions) that evaluates to nonzero (true) or 0 (false).

messagemessage
Die anzuzeigende Meldung.The message to display.

filenamefilename
Der Name der Quelldatei, in der der Assertionsfehler aufgetreten ist.The name of the source file the assertion failed in.

lineline
Die Zeilennummer in der Quelldatei mit dem Assertionsfehler.The line number in the source file of the failed assertion.

HinweiseRemarks

Das Assert -Makro wird normalerweise verwendet, um Logikfehler während der Programmentwicklung zu identifizieren.The assert macro is typically used to identify logic errors during program development. Verwenden Sie es, um die Programmausführung zu beenden, wenn unerwartete Bedingungen auftreten, indem Sie das Ausdrucks Argument so implementieren, dass es nur dann als false ausgewertet wird, wenn das ProgrammUse it to stop program execution when unexpected conditions occur by implementing the expression argument to evaluate to false only when the program is operating incorrectly. Assertionsüberprüfungen können zur Kompilierzeit durch Definieren des Makros NDEBUGdeaktiviert werden.Assertion checks can be turned off at compile time by defining the macro NDEBUG. Sie können das Assert -Makro deaktivieren, ohne die Quelldateien zu ändern, indem Sie die Befehlszeilenoption /DNDEBUG verwenden.You can turn off the assert macro without modifying your source files by using a /DNDEBUG command-line option. Sie können das Assert -Makro im Quellcode mit einer #define NDEBUG -Direktive ausschalten, bevor <Assert. h > enthalten ist.You can turn off the assert macro in your source code by using a #define NDEBUG directive before <assert.h> is included.

Das Assert -Makro gibt eine Diagnose Meldung aus, wenn Expression als false (0) ausgewertet wird, und ruft Abbruch auf, um die Programmausführung zu beenden.The assert macro prints a diagnostic message when expression evaluates to false (0) and calls abort to terminate program execution. Es wird keine Aktion ausgeführt, wenn Expression " true " (ungleich null) ist.No action is taken if expression is true (nonzero). Die Diagnosemeldung enthält den Ausdruck, für den der Fehler aufgetreten ist, den Namen der Quelldatei und die Nummer der Zeile, in der der Assertionsfehler aufgetreten ist.The diagnostic message includes the failed expression, the name of the source file and line number where the assertion failed.

Die Diagnosemeldung wird in Breitzeichen ausgegeben.The diagnostic message is printed in wide characters. Daher funktioniert sie auch dann erwartungsgemäß, wenn sich Unicode-Zeichen im Ausdruck befinden.Thus, it will work as expected even if there are Unicode characters in the expression.

Das Ziel der Diagnosemeldung hängt vom Typ der Anwendung ab, die die Routine aufgerufen hat.The destination of the diagnostic message depends on the type of application that called the routine. Konsolen Anwendungen empfangen die Nachricht immer über stderr.Console applications always receive the message through stderr. In einer Windows-basierten Anwendung ruft Assert die MessageBox -Funktion von Windows auf, um ein Meldungs Feld zu erstellen, in dem die Meldung zusammen mit einer OK -Schaltfläche angezeigt wird.In a Windows-based application, assert calls the Windows MessageBox function to create a message box to display the message along with an OK button. Wenn der Benutzer auf OKklickt, wird das Programm sofort beendet.When the user clicks OK, the program aborts immediately.

Wenn die Anwendung mit einer Debugversion der Laufzeitbibliotheken verknüpft ist, erstellt Assert ein Meldungs Feld mit drei Schaltflächen: Abbrechen, wiederholenund ignorieren.When the application is linked with a debug version of the run-time libraries, assert creates a message box with three buttons: Abort, Retry, and Ignore. Wenn der Benutzer auf Abbrechenklickt, wird das Programm sofort beendet.If the user clicks Abort, the program aborts immediately. Wenn der Benutzer auf Wiederholenklickt, wird der Debugger aufgerufen und der Benutzer kann das Programm debuggen, wenn Just-In-Time (JIT)-Debuggen aktiviert ist.If the user clicks Retry, the debugger is called and the user can debug the program if just-in-time (JIT) debugging is enabled. Wenn der Benutzer auf ignorierenklickt, wird Assert mit der normalen Ausführung fortgesetzt: Erstellen des Meldungs Felds mit der Schaltfläche " OK ".If the user clicks Ignore, assert continues with its normal execution: creating the message box with the OK button. Wenn ein Fehlerzustand vorliegt, kann das Klicken auf Ignorieren zu undefiniertem Verhalten führen.Note that clicking Ignore when an error condition exists can result in undefined behavior.

Weitere Informationen zum CRT-Debugging (C Runtime Library) finden Sie unter CRT-Debugverfahren.For more information about CRT debugging, see CRT Debugging Techniques.

Die Funktionen _ASSERT und _wassert sind interne CRT-Funktionen.The _assert and _wassert functions are internal CRT functions. Sie helfen dabei, den für die Unterstützung von Assertion in Ihren Objektdateien erforderlichen Code zu minimieren.They help minimize the code required in your object files to support assertions. Wir empfehlen nicht, diese Funktionen direkt aufzurufen.We do not recommend that you call these functions directly.

Das Assert -Makro ist sowohl in der Release-als auch der Debugversion der C-Laufzeitbibliotheken aktiviert, wenn NDEBUG nicht definiert ist.The assert macro is enabled in both the release and debug versions of the C run-time libraries when NDEBUG is not defined. Wenn NDEBUG definiert ist, ist das Makro verfügbar, wertet aber nicht sein Argument aus und hat keine Auswirkungen.When NDEBUG is defined, the macro is available but does not evaluate its argument and has no effect. Wenn es aktiviert ist, ruft das Assert -Makro _wassert für seine Implementierung auf.When it is enabled, the assert macro calls _wassert for its implementation. Andere Assertionsmakros, _ASSERT, _ASSERTE und _ASSERT_EXPR, sind ebenfalls verfügbar, sie werten die ihnen übergebenen Ausdrücke jedoch nur aus, wenn das _DEBUG -Makro definiert wurde und sie sich in Code befinden, der mit der Debugversion der C-Laufzeitbibliotheken gelinkt wurde.Other assertion macros, _ASSERT, _ASSERTE and _ASSERT_EXPR, are also available, but they only evaluate the expressions passed to them when the _DEBUG macro has been defined and when they are in code linked with the debug version of the C run-time libraries.

AnforderungenRequirements

-Routine zurückgegebener WertRoutine Erforderlicher HeaderRequired header
assert, _wassertassert, _wassert <assert.h><assert.h>

Die Signatur der _ASSERT -Funktion ist nicht in einer Header Datei verfügbar.The signature of the _assert function is not available in a header file. Die Signatur der _wassert -Funktion ist nur verfügbar, wenn das NDEBUG -Makro nicht definiert ist.The signature of the _wassert function is only available when the NDEBUG macro is not defined.

BeispielExample

In diesem Programm verwendet die analyze_string -Funktion das Assert -Makro, um verschiedene Bedingungen im Zusammenhang mit String und length zu testen.In this program, the analyze_string function uses the assert macro to test several conditions related to string and length. Wenn bei einer der Bedingungen ein Fehler auftritt, gibt das Programm eine Meldung aus, die auf die Ursache des Fehlers hinweist.If any of the conditions fails, the program prints a message indicating what caused the failure.

// crt_assert.c
// compile by using: cl /W4 crt_assert.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
}

Das Programm erzeugt diese Ausgabe:The program generates this output:

Analyzing string 'abc'
Analyzing string '(null)'
Assertion failed: string != NULL, file crt_assert.c, line 25

Je nach Version von Betriebssystem und Laufzeitbibliothek, wird möglicherweise nach dem Assertionsfehler ein Meldungsfeld angezeigt, das etwas in dieser Art enthält:After the assertion failure, depending on the version of the operating system and run-time library, you may see a message box that contains something like the following:

A problem caused the program to stop working correctly. Windows will close the program and notify you if a solution is available.

Wenn ein Debugger installiert ist, wählen Sie die Schaltfläche Debug aus, um den Debugger zu starten, oder Programm schließen zum Beenden.If a debugger is installed, choose the Debug button to start the debugger, or Close program to exit.

Siehe auchSee also

FehlerbehandlungError Handling
Prozess- und UmgebungssteuerungProcess and Environment Control
abortabort
raiseraise
signalsignal
_ASSERT, _ASSERTE, _ASSERT_EXPR Macros_ASSERT, _ASSERTE, _ASSERT_EXPR Macros
_DEBUG_DEBUG