Condividi tramite


_Static_assert parola chiave e static_assert macro (C11)

Verifica un'asserzione in fase di compilazione. Se l'espressione costante specificata è false, il compilatore visualizza il messaggio specificato e la compilazione ha esito negativo con errore C2338; in caso contrario, non vi è alcun effetto. Novità in C11.

_Static_assert è una parola chiave introdotta in C11. static_assert è una macro, introdotta in C11, che esegue il _Static_assert mapping alla parola chiave .

Sintassi

_Static_assert(constant-expression, string-literal);
static_assert(constant-expression, string-literal);

Parametri

constant-expression
Espressione costante integrale che può essere valutata in fase di compilazione. Se l'espressione è zero (false), visualizza il string-literal parametro e la compilazione ha esito negativo con un errore. Se l'espressione è diversa da zero (true), non c'è alcun effetto.

string-literal
Messaggio visualizzato se constant-expression restituisce zero (false). Il messaggio deve essere eseguito utilizzando il set di caratteri di base del compilatore. I caratteri non possono essere caratteri multibyte o wide.

Osservazioni:

La _Static_assert parola chiave e la static_assert macro testano entrambe un'asserzione software in fase di compilazione. Possono essere usati nell'ambito globale o di funzione.

Al contrario, la macro e _assert _wassert le assert funzioni testano un'asserzione software in fase di esecuzione e comportano un costo di runtime.

Comportamento specifico di Microsoft

In C, quando non si include <assert.h>, il compilatore Microsoft considera static_assert come una parola chiave che esegue il mapping a _Static_assert. L'uso static_assert è preferibile perché lo stesso codice funzionerà sia in C che in C++.

Esempio di asserzione in fase di compilazione

Nell'esempio static_assert seguente e _Static_assert vengono usati per verificare il numero di elementi in un'enumerazione e che i numeri interi sono a 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;
}

Requisiti

Macro Intestazione obbligatoria
static_assert <assert.h>

Eseguire la compilazione con /std:c11.

Windows SDK 10.0.20348.0 (versione 2104) o versione successiva. Per altre informazioni sull'installazione di Windows SDK per lo sviluppo C11 e C17, vedere Installare il supporto C11 e C17 in Visual Studio.

Vedi anche

_STATIC_ASSERT Macro
assert macro e _assert _wassert funzioni/std (specificare la versione standard del linguaggio)