Schlüsselwort _Static_assert
und Makro static_assert
(C11)
Hiermit wird eine Assertion zur Kompilierzeit getestet. Wenn der angegebene konstante Ausdruck false
ist, zeigt der Compiler die angegebene Meldung an, und bei der Kompilierung tritt der Fehler C2338 auf. Andernfalls passiert nichts. Neu in C11.
_Static_assert
ist ein Schlüsselwort, das in C11 eingeführt wurde. static_assert
ist ein in C11 eingeführtes Makro, das dem Schlüsselwort _Static_assert
zugeordnet ist.
Syntax
_Static_assert(constant-expression, string-literal);
static_assert(constant-expression, string-literal);
Parameter
constant-expression
Hierbei handelt es sich um einen integralen konstanten Ausdruck, der zur Kompilierzeit ausgewertet werden kann. Wenn der Ausdruck 0 (false) ist, wird der string-literal
-Parameter angezeigt, und bei der Kompilierung tritt ein Fehler auf. Wenn der Ausdruck nicht 0 (true) ist, passiert nichts.
string-literal
Die Meldung, die angezeigt wird, wenn constant-expression
als 0 (false) ausgewertet wird. Sie muss mit dem Basiszeichensatz des Compilers erstellt werden. Es dürfen keine Multibyte-Zeichen oder Breitzeichen verwendet werden.
Bemerkungen
Mit dem Schlüsselwort _Static_assert
und dem Makro static_assert
wird eine Softwareassertion zur Kompilierzeit getestet. Sie können für einen globalen Bereich oder einen Funktionsbereich verwendet werden.
Im Gegensatz dazu testen das assert
-Makro sowie die _assert
- und _wassert
-Funktionen Softwareassertionen zur Laufzeit, sodass Laufzeitkosten entstehen.
Microsoft-spezifisches Verhalten
Wenn Sie in C kein <assert.h>
-Element verwenden, behandelt der Microsoft-Compiler static_assert
als Schlüsselwort, das _Static_assert
zugeordnet ist. Die Verwendung von static_assert
wird bevorzugt, da derselbe Code dann sowohl in C als auch in C++ funktioniert.
Beispiel mit „assert“ zur Kompilierzeit
Im folgenden Beispiel werden static_assert
und _Static_assert
verwendet, um zu überprüfen, wie viele Elemente sich in einer Enumeration befinden und ob ganze Zahlen 32 Bit breit sind.
// requires /std:c11 or higher
#include <assert.h>
enum Items
{
A,
B,
C,
LENGTH
};
int main()
{
// _Static_assert is a C11 keyword
_Static_assert(LENGTH == 3, "Expected Items enum to have three elements");
// Preferred: static_assert maps to _Static_assert and is compatible with C++
static_assert(sizeof(int) == 4, "Expecting 32 bit integers");
return 0;
}
Anforderungen
Makro | Erforderlicher Header |
---|---|
static_assert |
<assert.h> |
Kompilieren Sie mit /std:c11
.
Windows SDK 10.0.20348.0 (Version 2104) oder höher. Weitere Informationen zur Installation des Windows SDK für die C11- und C17-Entwicklung finden Sie unter Installieren der Unterstützung für C11 und C17 in Visual Studio.
Siehe auch
_STATIC_ASSERT
-Macro
assert
-Makro sowie _assert
- und _wassert
-Funktionen/std
(Sprachstandardversion angeben)