_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)