Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A helyességi feltételt a fordítási időpontban teszteli. Ha a megadott állandó kifejezés az false, a fordító megjeleníti a megadott üzenetet, és a fordítás C2338-as hibával meghiúsul, ellenkező esetben nincs hatása. Új a C11-ben.
_Static_assert A C11-ben bevezetett kulcsszó.
static_assert A C11-ben bevezetett makró, amely megfelel a _Static_assert kulcsszónak.
Szemantika
_Static_assert(constant-expression, string-literal);
static_assert(constant-expression, string-literal);
Paraméterek
constant-expression
Egy integrál állandó kifejezés, amely fordításkor kiértékelhető. Ha a kifejezés nulla (hamis), megjeleníti a paramétert string-literal , és a fordítás hiba miatt meghiúsul. Ha a kifejezés nonzero (igaz), akkor nincs hatása.
string-literal
A megjelenő üzenet, ha constant-expression a kiértékelés értéke nulla (hamis). Az üzenetet a fordító alap karakterkészletével kell létrehozni. A karakterek nem lehetnek többbájtos vagy széles karakterek.
Megjegyzések
A _Static_assert kulcsszó és a static_assert makró egyaránt teszteli a szoftveres állítást fordításkor. Globális vagy függvényhatókörben is használhatók.
Ezzel szemben a makró és _assert_wassert aassert függvények futásidőben tesztelnek egy szoftveres állítást, és futásidejű költségekkel járnak.
Microsoft-specifikus viselkedés
A C-ben, ha nem tartalmazza <assert.h>, a Microsoft fordítója olyan kulcsszóként kezeli static_assert , amely megfelel a következőnek _Static_assert. A használat static_assert előnyben részesített, mert ugyanaz a kód a C és a C++-ban is működni fog.
Példa fordítási időre
Az alábbi példában a rendszer ellenőrzi, static_assert_Static_assert hogy hány elem van egy számban, és hogy az egész számok 32 bit szélesek.
// 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;
}
Követelmények
| Makró | Kötelező fejléc |
|---|---|
static_assert |
<assert.h> |
Fordítsa le a(z) /std:c11.
Windows SDK 10.0.20348.0 (2104-es verzió) vagy újabb. A Windows SDK C11-hez és C17-hez való telepítéséről további információt a C11 és C17 telepítése a Visual Studióban című témakörben talál.
Lásd még
_STATIC_ASSERT Makró
assert makró és _assert_wassert függvények
/std (A nyelvi standard verzió megadása)