assert
|
Definiert im Header
<assert.h>
|
||
|
#ifdef NDEBUG
#define assert(condition) ((void)0)
|
(bis C23) | |
|
#ifdef NDEBUG
#define assert(...) ((void)0)
|
(seit C23) | |
Die Definition des Makros
assert
hängt von einem anderen Makro ab,
NDEBUG
, das nicht von der Standardbibliothek definiert wird.
Wenn
NDEBUG
als Makroname an der Stelle im Quellcode definiert ist, wo
<assert.h>
eingebunden wird, dann tut
assert
nichts.
Wenn
NDEBUG
nicht definiert ist, prüft
assert
, ob
sein Argument
(bis C23)
der aus
__VA_ARGS__
synthetisierte Ausdruck
(seit C23)
(der skalaren Typ haben muss, andernfalls ist das Verhalten undefiniert) gleich Null ist. Wenn dies der Fall ist, gibt
assert
implementierungsspezifische Diagnoseinformationen auf der Standardfehlerausgabe aus und ruft
abort
(
)
auf. Die Diagnoseinformationen müssen den Text von
expression
sowie die Werte von
der
vordefinierten Variable
__func__
und von
(seit C99)
den
vordefinierten Makros
__FILE__
und
__LINE__
enthalten.
Inhaltsverzeichnis |
Parameter
| Bedingung | - | Ausdruck skalaren Typs |
Rückgabewert
(keine)
Hinweise
Es gibt keine standardisierte Schnittstelle, um eine zusätzliche Nachricht zu
assert
-Fehlern hinzuzufügen. Eine portable Methode, eine einzubinden, ist die Verwendung eines
Komma-Operators
, oder die Verwendung von
&&
mit einem String-Literal:
assert(("Es gibt fünf Lichter", 2 + 2 == 5)); assert(2 + 2 == 5 && "Es gibt fünf Lichter");
Die Implementierung von
assert
im
Microsoft CRT
entspricht nicht C99 und späteren Revisionen, da ihre zugrundeliegende Funktion (
_wassert
) weder
__func__
noch einen äquivalenten Ersatz akzeptiert.
Obwohl die Änderung von
assert
in C23 (
N2829
) kein formeller Fehlerbericht ist,
empfiehlt
das C-Komitee Implementierungen, die Änderung auf ältere Modi zurückzuportieren.
Beispiel
Mögliche Ausgabe:
--- Output with NDEBUG not defined: --- a.out: main.cpp:10: main: Assertion `x >= 0.0' failed. --- Output with NDEBUG defined: --- sqrt(x) = -nan
Referenzen
- C23-Standard (ISO/IEC 9899:2024):
-
- 7.2.2.1 Die assert-Makro (S: 196)
- C17-Standard (ISO/IEC 9899:2018):
-
- 7.2.1.1 Die assert-Makro (S: 135)
- C11-Standard (ISO/IEC 9899:2011):
-
- 7.2.1.1 Die assert-Makro (S: 186-187)
- C99-Standard (ISO/IEC 9899:1999):
-
- 7.2.1.1 Die assert-Makro (S: 169)
- C89/C90 Standard (ISO/IEC 9899:1990):
-
- 4.2.1.1 Die assert-Makro
Siehe auch
|
verursacht abnormale Programmbeendigung (ohne Bereinigung)
(Funktion) |
|
|
C++ Dokumentation
für
assert
|
|