_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. V opačném případě to nemá žádný vliv. Novinka v C11.
_Static_assert
je klíčové slovo zavedené v C11. static_assert
je makro představené v 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
se parametr a kompilace selže s chybou. Pokud je výraz nenulový (true), nemá to žádný vliv.
string-literal
Zobrazená zpráva, pokud constant-expression
se vyhodnotí na nulu (nepravda). Zpráva musí být vytvořená 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í kontrolní výraz softwaru v době kompilace. Dají se použít v globálním oboru nebo v oboru funkce.
Naproti tomu assert
makro a _assert
_wassert
funkce testuje softwarový kontrolní výraz za běhu a účtují se náklady za běh.
Chování specifické pro Microsoft
Pokud v jazyce C nezadáte <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 ve výčtu a že celá čísla mají šířku 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> |
Zkompilujte 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
funkce a _wassert
(/std
určení standardní verze jazyka)
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro