Partilhar via


_Static_assert palavra-chave e static_assert macro (C11)

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)