Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Test een assertie tijdens het compileren. Als de opgegeven constante expressie is false, geeft de compiler het opgegeven bericht weer en mislukt de compilatie met fout C2338; anders is er geen effect. Nieuw in C11.
_Static_assert is een trefwoord dat is geïntroduceerd in C11.
static_assert is een macro, geïntroduceerd in C11, die wordt toegewezen aan het _Static_assert trefwoord.
Syntaxis
_Static_assert(constant-expression, string-literal);
static_assert(constant-expression, string-literal);
Parameterwaarden
constant-expression
Een integrale constante expressie die tijdens het compileren kan worden geëvalueerd. Als de expressie nul (onwaar) is, wordt de string-literal parameter weergegeven en mislukt de compilatie met een fout. Als de expressie niet nul is (waar), is er geen effect.
string-literal
Het bericht dat wordt weergegeven als constant-expression het resultaat nul is (onwaar). Het bericht moet worden gemaakt met behulp van de basistekenset van de compiler. De tekens mogen niet uit meerdere of brede tekens bestaan.
Opmerkingen
Het _Static_assert trefwoord en de static_assert macro testen beide een softwareverklaring tijdens het compileren. Ze kunnen worden gebruikt op globaal of functiebereik.
De macro en _assert_wassert functies testen daarentegenassert een softwareverklaring tijdens runtime en kosten voor runtime.
Microsoft-specifiek gedrag
Als u in C niet opneemt <assert.h>, wordt de Microsoft-compiler behandeld static_assert als een trefwoord waaraan wordt toegewezen _Static_assert. Het gebruik static_assert heeft de voorkeur omdat dezelfde code werkt in zowel C als C++.
Voorbeeld van een compileertijd-assert
In het volgende voorbeeld static_assert en _Static_assert worden gebruikt om te controleren hoeveel elementen zich in een enum bevinden en of gehele getallen 32 bits breed zijn.
// 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;
}
Behoeften
| Macroniveau | Vereiste header |
|---|---|
static_assert |
<assert.h> |
Compileer met /std:c11.
Windows SDK 10.0.20348.0 (versie 2104) of hoger. Zie C11- en C17-ondersteuning installeren in Visual Studio voor meer informatie over het installeren van de Windows SDK voor C11- en C17-ontwikkeling.
Zie ook
_STATIC_ASSERT Macro
assert macro's en _assert_wassert functies
/std (Taalstandaardversie opgeven)