Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
palavra-chave
Testa uma asserção no 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 terá efeito. Novo no C11.
_Static_assert é uma palavra-chave introduzida em C11.
static_assert é uma macro, introduzida no C11, que mapeia para a palavra-chave _Static_assert.
Sintaxe
_Static_assert(constant-expression, string-literal);
static_assert(constant-expression, string-literal);
Parâmetros
constant-expression
Uma expressão constante integral é uma expressão que pode ser avaliada no tempo de compilação. Se a expressão for zero (false), mostra o parâmetro string-literal e a compilação falhará com um erro. Se a expressão for diferente de zero (verdadeiro), então não terá efeito.
string-literal
A mensagem exibida se constant-expression avaliada como zero (falso). A mensagem precisa ser criada usando o conjunto de caracteres base do compilador. Os caracteres não podem ser caracteres multibyte ou largos.
Comentários
A palavra-chave _Static_assert e a macro static_assert testam uma instrução de declaração de software no tempo de compilação. Elas podem ser usadas no escopo global ou de função.
Por outro lado, a macro assert e as funções _assert e _wassert testam uma asserção de software em runtime e incorrem em um custo de runtime.
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 mapeada para _Static_assert. É preferível usar static_assert porque o mesmo código funcionará em C e C++.
Exemplo de uma declaração de tempo de compilação
No exemplo a seguir, static_assert e _Static_assert são usados para verificar quantos elementos estão em uma enumeração e se 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;
}
Requisitos
| Macro | Cabeçalho necessário |
|---|---|
static_assert |
<assert.h> |
Compilar com /std:c11.
SDK do Windows 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 de C11 e C17 no Visual Studio.
Confira também
Macro _STATIC_ASSERT
assert macro e _assert_wassert funções
/std (Especificar a versão padrão do idioma)