_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
Całkowite wyrażenie stałe, 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.
assert
Natomiast 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łączysz <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ęzyku C, jak i C++.
Przykład asercji czasu kompilacji
W poniższym przykładzie static_assert
i _Static_assert
są używane do weryfikowania liczby elementów wyliczeniowych i że liczby całkowite mają szerokość 32 bitów.
// 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 za pomocą 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 C11 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)