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. V opačném případě to nemá žádný vliv. Novinka v C11.

_Static_assert je klíčové slovo zavedené v C11. static_assert je makro představené v 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 se parametr a kompilace selže s chybou. Pokud je výraz nenulový (true), nemá to žádný vliv.

string-literal
Zobrazená zpráva, pokud constant-expression se vyhodnotí na nulu (nepravda). Zpráva musí být vytvořená 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í kontrolní výraz softwaru v době kompilace. Dají se použít v globálním oboru nebo v oboru funkce.

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

Chování specifické pro Microsoft

Pokud v jazyce C nezadáte <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 ve výčtu a že celá čísla mají šířku 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>

Zkompilujte 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 funkce a _wassert (/std určení standardní verze jazyka)