Static assertion (seit C11)
Inhalt |
[bearbeiten] Syntax
_Static_assert ( expression , message ) |
(seit C11)(veraltet in C23) | ||||||||
static_assert ( expression , message ) |
(seit C23) | ||||||||
_Static_assert ( expression ) |
(seit C23)(in C23 veraltet) | ||||||||
static_assert ( expression ) |
(seit C23) | ||||||||
| expression | - | beliebiger ganzzahliger konstanten Ausdruck |
| message | - | beliebiger String-Literal |
|
Dieses Schlüsselwort ist auch als praktische Makro-Definition static_assert verfügbar, im Header <assert.h>. |
(bis C23) |
|
Sowohl Eine Implementierung kann |
(seit C23) |
[bearbeiten] Erklärung
Der konstante Ausdruck wird zur Kompilierzeit ausgewertet und mit Null verglichen. Wenn er gleich Null ist, tritt ein Kompilierungsfehler auf und der Compiler muss die message als Teil der Fehlermeldung anzeigen (außer dass Zeichen, die nicht zum Basiszeichensatz gehören, nicht zwingend angezeigt werden müssen(bis C23)sollte die message (falls vorhanden) als Teil der Fehlermeldung anzeigen(seit C23).
Andernfalls, wenn expression nicht Null ist, passiert nichts; es wird kein Code generiert.
[bearbeiten] Schlüsselwörter
[bearbeiten] Beispiel
#include <assert.h> // no longer needed since C23 int main(void) { // Test if math works, C23: static_assert((2 + 2) % 3 == 1, "Whoa dude, you knew!"); // Pre-C23 alternative: _Static_assert(2 + 2 * 2 == 6, "Lucky guess!?"); // This will produce an error at compile time. // static_assert(sizeof(int) < sizeof(char), "Unmet condition!"); constexpr int _42 = 2 * 3 * 2 * 3 + 2 * 3; static_assert(_42 == 42); // the message string can be omitted. // const int _13 = 13; // Compile time error - not an integer constant expression: // static_assert(_13 == 13); }
[bearbeiten] Referenzen
- C23-Standard (ISO/IEC 9899:2024)
- 6.7.11 Static assertions (S: TBD)
- C17-Standard (ISO/IEC 9899:2018)
- 6.7.10 Static assertions (S: 105)
- 7.2 Diagnostics <assert.h> (S: 135)
- C11-Standard (ISO/IEC 9899:2011)
- 6.7.10 Static assertions (S: 145)
- 7.2 Diagnostics <assert.h> (S: 186-187)
[bearbeiten] Siehe auch
| bricht das Programm ab, wenn die vom Benutzer spezifizierte Bedingung nicht wahr ist. Kann für Release-Builds deaktiviert werden (Funktionsmakro) | |
| C++ Dokumentation für
static_assert Deklaration | |