Assertion und benutzerdefinierte Meldungen (C++)Assertion and User-Supplied Messages (C++)

Die C++ Sprache unterstützt drei Fehler Behandlungs Mechanismen, die Sie beim Debuggen Ihrer Anwendung unterstützen: die #Error-Direktive, das static_assert -Schlüsselwort und das ASSERT-Makro, _ASSERT _wassert Makro.The C++ language supports three error handling mechanisms that help you debug your application: the #error directive, the static_assert keyword, and the assert Macro, _assert, _wassert macro. Alle drei Mechanismen geben Fehlermeldungen aus, zwei testen auch Softwareassertionen.All three mechanisms issue error messages, and two also test software assertions. Eine Softwareassertion gibt eine Bedingung an, die an einer bestimmten Stelle im Programm "true" sein muss.A software assertion specifies a condition that you expect to be true at a particular point in your program. Wenn bei einer Assertion zur Kompilierzeit ein Fehler auftritt, gibt der Compiler eine Diagnosemeldung und einen Kompilierungsfehler aus.If a compile time assertion fails, the compiler issues a diagnostic message and a compilation error. Wenn bei einer Assertion zur Laufzeit ein Fehler auftritt, gibt das Betriebssystem eine Diagnosemeldung aus und schließt Ihre Anwendung.If a run-time assertion fails, the operating system issues a diagnostic message and closes your application.

BemerkungenRemarks

Die Lebensdauer der Anwendung besteht aus einer Vorverarbeitungs-, einer Kompilierungs- und einer Laufzeitphase.The lifetime of your application consists of a preprocessing, compile, and run time phase. Jeder Mechanismus zur Fehlerbehandlung greift auf Debuginformationen zu, die während einer dieser Phasen verfügbar sind.Each error handling mechanism accesses debug information that is available during one of these phases. Um auf effiziente Weise zu debuggen, wählen Sie den Mechanismus aus, der entsprechende Informationen über diese Phase bereitstellt:To debug effectively, select the mechanism that provides appropriate information about that phase:

  • Die #Error-Direktive ist während der Vorverarbeitungs Zeit wirksam.The #error directive is in effect at preprocessing time. Sie gibt bedingungslos eine vom Benutzer angegebene Meldung aus und führt dazu, dass die Kompilierung mit einem Fehler beendet wird.It unconditionally emits a user-specified message and causes the compilation to fail with an error. Die Meldung kann Text enthalten, der von Präprozessordirektiven geändert wird, aber Ausdrucksergebnisse werden nicht gewertet.The message can contain text that is manipulated by preprocessor directives but any resulting expression is not evaluated.

  • Die static_assert Deklaration ist zur Kompilierzeit wirksam.The static_assert declaration is in effect at compile time. Sie testet eine Softwareassertion, die durch einen vom Benutzer angegebenen ganzzahligen Ausdruck dargestellt wird, der in einen booleschen Wert konvertiert werden kann.It tests a software assertion that is represented by a user-specified integral expression that can be converted to a Boolean. Wenn der Ausdruck 0 (false) ergibt, gibt der Compiler die vom Benutzer angegebene Meldung aus, und die Kompilierung wird mit einem Fehler beendet.If the expression evaluates to zero (false), the compiler issues the user-specified message and the compilation fails with an error.

    Die static_assert-Deklaration ist zum Debuggen von Vorlagen besonders nützlich, da Vorlagenargumente in den benutzerdefinierten Ausdruck eingeschlossen werden können.The static_assert declaration is especially useful for debugging templates because template arguments can be included in the user-specified expression.

  • Das ASSERT-Makro, _ASSERT _wassert -Makro, ist zur Laufzeit wirksam.The assert Macro, _assert, _wassert macro is in effect at run time. Es wertet einen vom Benutzer angegebenen Ausdruck aus, und wenn das Ergebnis null (0) ist, gibt das System eine Diagnosemeldung aus und schließt die Anwendung.It evaluates a user-specified expression, and if the result is zero, the system issues a diagnostic message and closes your application. Viele andere Makros, wie z. b._ASSERT und _ASSERTE, ähneln diesem Makro, geben aber unterschiedliche System definierte oder benutzerdefinierte Diagnosemeldungen aus.Many other macros, such as_ASSERT and _ASSERTE, resemble this macro but issue different system-defined or user-defined diagnostic messages.

Weitere InformationenSee also

#error-Direktive (C/C++)#error Directive (C/C++)
assert Macro, _assert, _wassertassert Macro, _assert, _wassert
_ASSERT-, _ASSERTE-, _ASSERT_EXPR-Makros_ASSERT, _ASSERTE, _ASSERT_EXPR Macros
static_assertstatic_assert
_STATIC_ASSERT Macro_STATIC_ASSERT Macro
VorlagenTemplates