Freigeben über


Assertion und benutzerdefinierte Meldungen (C++)

Die Programmiersprache C++ unterstützt drei Mechanismen zur Fehlerbehandlung, mit deren Hilfe Sie die Anwendung debuggen können: die #error-Direktive, das static_assert-Schlüsselwort und das assert (CRT)-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 #error-Direktive ist während der Vorverarbeitungsphase 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 ist zur Kompilierzeit 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 assert (CRT)-Marko ist zur Laufzeit aktiv. 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, wie_ASSERT und _ASSERTE, ähneln diesem Makro, geben aber unterschiedliche systemdefinierte oder benutzerdefinierte Diagnosemeldungen aus.

Siehe auch

Referenz

#error-Direktive (C/C++)

assert (CRT)

_ASSERT- und _ASSERTE-Makros

static_assert

_STATIC_ASSERT-Makro

Weitere Ressourcen

Vorlagen