Static assertion (since C11)
Inhaltsverzeichnis |
Syntax
_Static_assert
(
Ausdruck
,
Nachricht
)
|
(seit C11) (veraltet in C23) | ||||||||
static_assert
(
Ausdruck
,
Nachricht
)
|
(seit C23) | ||||||||
_Static_assert
(
Ausdruck
)
|
(seit C23) (veraltet in C23) | ||||||||
static_assert
(
Ausdruck
)
|
(seit C23) | ||||||||
| expression | - | jede ganzzahlige konstante Ausdruck |
| message | - | jeder Zeichenkettenliteral |
|
Dieses Schlüsselwort ist auch als praktisches Makro static_assert verfügbar, erreichbar im Header <assert.h> . |
(bis C23) |
|
Sowohl
Eine Implementierung kann außerdem
|
(seit C23) |
Erklärung
Der konstante Ausdruck wird zur Kompilierzeit ausgewertet und mit Null verglichen. Wenn er gleich Null ist, tritt ein Kompilierzeitfehler auf und der Compiler muss message als Teil der Fehlermeldung anzeigen (außer dass Zeichen nicht im basic character set nicht angezeigt werden müssen) (until C23) sollte message (falls angegeben) als Teil der Fehlermeldung anzeigen (since C23) .
Andernfalls, wenn expression ungleich null ist, geschieht nichts; es wird kein Code erzeugt.
Schlüsselwörter
_Static_assert , static_assert
Beispiel
#include <assert.h> // no longer needed since C23 int main(void) { // Testen ob Mathematik funktioniert, C23: static_assert((2 + 2) % 3 == 1, "Whoa dude, you knew!"); // Pre-C23 Alternative: _Static_assert(2 + 2 * 2 == 6, "Lucky guess!?"); // Dies wird einen Fehler zur Kompilierzeit erzeugen. // static_assert(sizeof(int) < sizeof(char), "Unmet condition!"); constexpr int _42 = 2 * 3 * 2 * 3 + 2 * 3; static_assert(_42 == 42); // die Nachricht kann weggelassen werden. // const int _13 = 13; // Kompilierzeitfehler - kein Integer-Konstantenausdruck: // static_assert(_13 == 13); }
Referenzen
- C23-Standard (ISO/IEC 9899:2024):
-
- 6.7.11 Statische Assertionen (S: TBD)
- C17-Standard (ISO/IEC 9899:2018):
-
- 6.7.10 Static assertions (p: 105)
-
- 7.2 Diagnostics <assert.h> (p: 135)
- C11-Standard (ISO/IEC 9899:2011):
-
- 6.7.10 Static assertions (p: 145)
-
- 7.2 Diagnostics <assert.h> (p: 186-187)
Siehe auch
|
bricht das Programm ab, falls die benutzerdefinierte Bedingung nicht
true
ist. Kann für Release-Builds deaktiviert werden
(Funktionsmakro) |
|
|
C++-Dokumentation
für
static_assert
Deklaration
|
|