Looking for c Keywords? Try Ask4Keywords

C LanguageBehauptung


Einführung

Eine Assertion ist ein Prädikat, dass die dargestellte Bedingung in dem Moment wahr sein muss, in dem die Software von der Assertion getroffen wird. Am häufigsten sind einfache Zusicherungen , die zur Ausführungszeit überprüft werden. Statische Zusicherungen werden jedoch zur Kompilierzeit geprüft.

Syntax

  • behaupten (Ausdruck)
  • static_assert (Ausdruck, Nachricht)
  • _Static_assert (Ausdruck, Nachricht)

Parameter

Parameter Einzelheiten
Ausdruck Ausdruck des Skalartyps.
Botschaft String-Literal, das in die Diagnosemeldung aufgenommen werden soll.

Bemerkungen

Sowohl assert und static_assert sind Makros in definierten assert.h .

Die Definition von assert hängt von der Makro NDEBUG , die nicht durch die Standardbibliothek definiert ist. Wenn NDEBUG definiert ist, assert ist ein No-op:

#ifdef NDEBUG
#  define assert(condition) ((void) 0)
#else
#  define assert(condition) /* implementation defined */
#endif

Es gibt unterschiedliche Meinungen darüber, ob NDEBUG immer für Produktionszusammenstellungen verwendet werden sollte.

  • Das Pro-Lager argumentiert , dass assert Anrufe abort und Assertion - Meldungen sind nicht hilfreich für den Endverbraucher, so das Ergebnis Benutzer nicht hilfreich ist. Wenn Sie schwerwiegende Bedingungen zum Einchecken des Produktionscodes haben, sollten Sie normale if/else Bedingungen verwenden und exit oder quick_exit zum quick_exit des Programms verwenden. Im Gegensatz zum abort kann das Programm einige Bereinigungen atexit (über Funktionen, die mit atexit oder at_quick_exit registriert at_quick_exit ).
  • Das Con-Camp argumentiert, dass assert Aufrufe niemals im Produktionscode ausgelöst werden sollten, aber wenn dies der Fall ist, bedeutet dies, dass etwas dramatisch falsch ist und das Programm sich schlechter benimmt, wenn die Ausführung fortgesetzt wird. Daher ist es besser, die Aussagen im Produktionscode zu aktivieren, denn wenn sie feuern, ist die Hölle bereits gebrochen.
  • Eine andere Möglichkeit besteht darin, ein Selbstbrühsystem für Assertions zu verwenden, das die Prüfung immer vornimmt, jedoch Fehler zwischen Entwicklung (wo abort angebracht ist) und Produktion (bei "unerwartetem internem Fehler - wenden Sie sich an den technischen Support" an, möglicherweise angemessener).

static_assert erweitert sich zu _Static_assert , einem Schlüsselwort. Die Bedingung wird zur Kompilierzeit geprüft, daher muss die condition ein konstanter Ausdruck sein. Es ist nicht erforderlich, dass dies in der Entwicklung und in der Produktion anders gehandhabt wird.

Behauptung Verwandte Beispiele