Freigeben über


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)