Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Testa uma asserção em tempo de compilação. Se a expressão constante especificada for false, o compilador exibirá a mensagem especificada e a compilação falhará com o erro C2338, caso contrário, não haverá efeito. Novo no C11.
_Static_assert é uma palavra-chave introduzida em C11.
static_assert é uma macro, introduzida em C11, que mapeia para a _Static_assert palavra-chave.
Sintaxe
_Static_assert(constant-expression, string-literal);
static_assert(constant-expression, string-literal);
Parâmetros
constant-expression
Uma expressão constante integral que pode ser avaliada em tempo de compilação. Se a expressão for zero (false), exibirá o string-literal parâmetro e a compilação falhará com um erro. Se a expressão for diferente de zero (true), então não há efeito.
string-literal
A mensagem exibida se constant-expression for avaliada como zero (false). A mensagem deve ser feita usando o conjunto de caracteres base do compilador. Os caracteres não podem ser multibyte ou caracteres largos.
Observações
A _Static_assert palavra-chave e a static_assert macro testam uma asserção de software em tempo de compilação. Eles podem ser usados no escopo global ou da função.
Em contraste, a macro e _assert as funções e _wassert testamassert uma asserção de software em tempo de execução e incorrem em um custo de tempo de execução.
Comportamento específico da Microsoft
Em C, quando você não inclui <assert.h>, o compilador da Microsoft trata static_assert como uma palavra-chave que mapeia para _Static_assert. O uso static_assert é preferível porque o mesmo código funcionará em C e C++.
Exemplo de uma declaração em tempo de compilação
No exemplo a seguir, static_assert e _Static_assert são usados para verificar quantos elementos estão em um enum e que os inteiros têm 32 bits de largura.
// 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;
}
Requerimentos
| Macro | Cabeçalho obrigatório |
|---|---|
static_assert |
<assert.h> |
Compilar com /std:c11.
Windows SDK 10.0.20348.0 (versão 2104) ou posterior. Para obter mais informações sobre como instalar o SDK do Windows para desenvolvimento C11 e C17, consulte Instalar suporte a C11 e C17 no Visual Studio.
Ver também
_STATIC_ASSERT Macro
assertmacro e _assert funções _wassert
/std (Especificar a versão normalizada da língua)