Sdílet prostřednictvím


_Static_assert klíčové slovo a static_assert makro (C11)

Testuje kontrolní výraz v době kompilace. Pokud je falsezadaný konstantní výraz , kompilátor zobrazí zadanou zprávu a kompilace selže s chybou C2338; jinak neexistuje žádný účinek. Novinka v C11.

_Static_assert je klíčové slovo představené v C11. static_assert je makro představené v jazyce C11, které se mapuje na _Static_assert klíčové slovo.

Syntaxe

_Static_assert(constant-expression, string-literal);
static_assert(constant-expression, string-literal);

Parametry

constant-expression
Celočíselný konstantní výraz, který lze vyhodnotit v době kompilace. Pokud je výraz nula (false), zobrazí string-literal parametr a kompilace selže s chybou. Pokud je výraz nenulový (true), neexistuje žádný efekt.

string-literal
Zpráva se zobrazí, pokud constant-expression se vyhodnotí jako nula (false). Zpráva musí být provedena pomocí základní znakové sady kompilátoru. Znaky nesmí být vícebajtové ani široké.

Poznámky

Klíčové _Static_assert slovo a static_assert makro testují softwarové kontrolní výrazy v době kompilace. Dají se použít v globálním rozsahu nebo oboru funkce.

Naproti tomu assert makro a _assert _wassert funkce testuje kontrolní výraz softwaru za běhu a účtují se náklady za běhu.

Chování specifické pro Microsoft

Pokud v jazyce C nezahrnete <assert.h>, kompilátor Microsoftu považuje static_assert za klíčové slovo, které se mapuje na _Static_assert. Použití static_assert je upřednostňované, protože stejný kód bude fungovat v jazyce C i C++.

Příklad kontrolního výrazu v době kompilace

V následujícím příkladu a _Static_assert slouží k ověření, static_assert kolik prvků je v výčtu a že celá čísla jsou širokých 32 bitů.

// 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;
}

Požadavky

Makro Požadovaný hlavičkový soubor
static_assert <assert.h>

Zkompilovat pomocí /std:c11.

Windows SDK 10.0.20348.0 (verze 2104) nebo novější Další informace o instalaci sady Windows SDK pro vývoj pro C11 a C17 najdete v tématu Instalace podpory C11 a C17 v sadě Visual Studio.

Viz také

_STATIC_ASSERT Makro
assert makro a _assert _wassert funkce/std (určení standardní verze jazyka)