Megosztás a következőn keresztül:


_Static_assert kulcsszó és static_assert makró (C11)

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)