_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)
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla