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 l'errore C2338; in caso contrario, non esiste alcun effetto. Novità in C11.

_Static_assert è una parola chiave introdotta in C11. static_assert è una macro, introdotta in C11, che esegue il mapping alla _Static_assert 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 è non zero (true), non esiste alcun effetto.

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

Commenti

Parola _Static_assert chiave e macro, entrambi testano un'asserzione static_assert software in fase di compilazione. Possono essere usati nell'ambito globale o della funzione.

Al contrario, la macro e _assert_wassert le funzioni testano un'asserzioneassert 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 parola chiave che esegue il mapping a _Static_assert. L'uso static_assert è preferito perché lo stesso codice funzionerà sia in C che in C++.

Esempio di asserzione in fase di compilazione

Nell'esempio static_assert seguente viene usato per _Static_assert verificare il numero di elementi presenti in un'enumerazione e che gli 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)