_Static_assert
klíčové slovo a static_assert
makro (C11)
Testuje kontrolní výraz v době kompilace. Pokud je false
zadaný konstantní výraz , kompilátor zobrazí zadanou zprávu a kompilace selže s chybou C2338; jinak neexistuje žádný účinek. Novinka v C11.
_Static_assert
je klíčové slovo představené v C11. static_assert
je makro představené v jazyce 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
parametr a kompilace selže s chybou. Pokud je výraz nenulový (true), neexistuje žádný efekt.
string-literal
Zpráva se zobrazí, pokud constant-expression
se vyhodnotí jako nula (false). Zpráva musí být provedena 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í softwarové kontrolní výrazy v době kompilace. Dají se použít v globálním rozsahu nebo oboru funkce.
Naproti tomu assert
makro a _assert
_wassert
funkce testuje kontrolní výraz softwaru za běhu a účtují se náklady za běhu.
Chování specifické pro Microsoft
Pokud v jazyce C nezahrnete <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 v výčtu a že celá čísla jsou širokých 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> |
Zkompilovat 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
_wassert
funkce/std
(určení standardní verze jazyka)