Compartir vía


Palabra clave _Static_assert y macro static_assert (C11)

Prueba una aserción en tiempo de compilación. Si la expresión constante especificada es false , el compilador muestra el mensaje especificado y se produce un error C2338 en la compilación; de lo contrario, no tiene ningún efecto. Es nuevo en C11.

_Static_assert es una palabra clave que se presentó en C11. static_assert es una macro presentada en C11 que se asigna a la palabra clave _Static_assert .

Sintaxis

_Static_assert(constant-expression, string-literal);
static_assert(constant-expression, string-literal);

Parámetros

constant-expression
Expresión constante integral que se puede evaluar en tiempo de compilación. Si la expresión es cero (false), muestra el parámetro string-literal y se produce un error de compilación. Si la expresión es distinta de cero (true), no tiene ningún efecto.

string-literal
Mensaje que se muestra si constant-expression se evalúa como cero (false). El mensaje debe crearse mediante el juego de caracteres base del compilador. Los caracteres no pueden ser caracteres anchos ni multibyte.

Observaciones

La palabra clave _Static_assert y la macro static_assert prueban una aserción de software en tiempo de compilación. Se pueden usar en un ámbito global o de función.

En cambio, la macro assert y las funciones _assert y _wassert prueban una aserción de software en tiempo de ejecución e incurren en un costo en tiempo de ejecución.

Comportamiento específico de Microsoft

En C, si no se incluye <assert.h>, el compilador de Microsoft trata static_assert como una palabra clave que se asigna a _Static_assert . Se prefiere el uso de static_assert , ya que el mismo código funciona en C y C++.

Ejemplo de una aserción en tiempo de compilación

En el ejemplo siguiente se usan static_assert y _Static_assert para comprobar cuántos elementos hay en una enumeración y que los enteros tengan un ancho de 32 bits.

// 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 Encabezado necesario
static_assert <assert.h>

Compile con /std:c11.

Windows SDK 10.0.20348.0 (versión 2104) o posterior. Para obtener información sobre cómo instalar el Windows SDK para el desarrollo con C11 y C17, vea Instalación de la compatibilidad con C11 y C17 en Visual Studio.

Vea también

_STATIC_ASSERT (macro)
Macro assert y funciones _assert y _wassert/std (Especificación de la versión estándar del lenguaje)