palavra-chave _Static_assert
e macro static_assert
(C11)
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 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;
}
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
Macro assert
e funções _assert
e _wassert
/std
(especifique a versão padrão de linguagem)