Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 later
#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)