Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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_assert le _wassert 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 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;
}
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 della lingua)