_Static_assert słowo kluczowe i static_assert makro (C11)

Testuje asercji w czasie kompilacji. Jeśli określone wyrażenie stałe to false, kompilator wyświetla określony komunikat, a kompilacja kończy się niepowodzeniem z powodu błędu C2338. W przeciwnym razie nie ma żadnego efektu. Nowość w C11.

_Static_assert jest słowem kluczowym wprowadzonym w języku C11. static_assert to makro wprowadzone w języku C11, które mapuje na _Static_assert słowo kluczowe .

Składnia

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

Parametry

constant-expression
Wyrażenie stałe całkowite, które można ocenić w czasie kompilacji. Jeśli wyrażenie ma wartość zero (false), wyświetla string-literal parametr i kompilacja kończy się niepowodzeniem z powodu błędu. Jeśli wyrażenie jest niezerowe (true), nie ma żadnego efektu.

string-literal
Komunikat wyświetlany, jeśli constant-expression daje wartość zero (false). Komunikat musi zostać wykonany przy użyciu podstawowego zestawu znaków kompilatora. Znaki nie mogą być znakami wielobajtowym ani szerokimi.

Uwagi

Słowo _Static_assert kluczowe i static_assert makro testuje asercji oprogramowania w czasie kompilacji. Mogą być używane w zakresie globalnym lub funkcji.

Z kolei assert makro i _assert_wassert funkcje testują asercji oprogramowania w czasie wykonywania i generują koszt środowiska uruchomieniowego.

Zachowanie specyficzne dla firmy Microsoft

W języku C, jeśli nie dołączasz <assert.h>elementu , kompilator firmy Microsoft traktuje static_assert jako słowo kluczowe mapowane na _Static_assert. Użycie static_assert jest preferowane, ponieważ ten sam kod będzie działać zarówno w językach C, jak i C++.

Przykład asercji czasu kompilacji

W poniższym przykładzie i _Static_assert są używane do sprawdzania, static_assert ile elementów należy do wyliczenia i czy liczby całkowite mają 32 bity szerokości.

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

Wymagania

Makro Wymagany nagłówek
static_assert <assert.h>

Skompiluj przy użyciu polecenia /std:c11.

Windows SDK 10.0.20348.0 (wersja 2104) lub nowsza. Aby uzyskać więcej informacji na temat instalowania zestawu Windows SDK dla programowania W11 i C17, zobacz Instalowanie obsługi C11 i C17 w programie Visual Studio.

Zobacz też

_STATIC_ASSERT Makro
assert makro i _assert_wassert funkcje/std (określ wersję standardową języka)