Assertion und benutzerdefinierte Meldungen (C++)

Die C++-Sprache unterstützt drei Fehlerbehandlungsmechanismen, mit denen Sie Ihre Anwendung debuggen können: die #error-Direktive, die static_assert Schlüsselwort (keyword) und das Assertionsmakro, _assert _wassert Makro. Alle drei Mechanismen geben Fehlermeldungen aus, zwei testen auch Softwareassertionen. Eine Softwareassertion gibt eine Bedingung an, die an einer bestimmten Stelle im Programm "true" sein muss. Wenn bei einer Assertion zur Kompilierzeit ein Fehler auftritt, gibt der Compiler eine Diagnosemeldung und einen Kompilierungsfehler aus. Wenn bei einer Assertion zur Laufzeit ein Fehler auftritt, gibt das Betriebssystem eine Diagnosemeldung aus und schließt Ihre Anwendung.

Hinweise

Die Lebensdauer der Anwendung besteht aus einer Vorverarbeitungs-, einer Kompilierungs- und einer Laufzeitphase. Jeder Mechanismus zur Fehlerbehandlung greift auf Debuginformationen zu, die während einer dieser Phasen verfügbar sind. Um auf effiziente Weise zu debuggen, wählen Sie den Mechanismus aus, der entsprechende Informationen über diese Phase bereitstellt:

  • Die richtlinie #error ist zur Vorverarbeitungszeit wirksam. Sie gibt bedingungslos eine vom Benutzer angegebene Meldung aus und führt dazu, dass die Kompilierung mit einem Fehler beendet wird. Die Meldung kann Text enthalten, der von Präprozessordirektiven geändert wird, aber Ausdrucksergebnisse werden nicht gewertet.

  • Die static_assert Deklaration wird zur Kompilierungszeit wirksam. Sie testet eine Softwareassertion, die durch einen vom Benutzer angegebenen ganzzahligen Ausdruck dargestellt wird, der in einen booleschen Wert konvertiert werden kann. Wenn der Ausdruck 0 (false) ergibt, gibt der Compiler die vom Benutzer angegebene Meldung aus, und die Kompilierung wird mit einem Fehler beendet.

    Die static_assert-Deklaration ist zum Debuggen von Vorlagen besonders nützlich, da Vorlagenargumente in den benutzerdefinierten Ausdruck eingeschlossen werden können.

  • Das Assertionsmakro _assert _wassert Makro wird zur Laufzeit wirksam. 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. Viele andere Makros, z. B. _ASSERT und _ASSERTE, ähneln diesem Makro, stellen aber verschiedene systemdefinierte oder benutzerdefinierte Diagnosemeldungen aus.

Siehe auch

#error-Direktive (C/C++)
assert Macro, _assert, _wassert
_ASSERT, _ASSERTE, _ASSERT_EXPR Macros
static_assert
Makro „_STATIC_ASSERT“
Vorlagen