_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)
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per