Aserciones en tiempo de compilación en C
_Static_assert verifica una expresión constante al compilar: las builds malas fallan temprano.
#include <limits.h>
#include <stdint.h>
typedef struct {
uint32_t id;
uint32_t flags;
} Header;
_Static_assert(sizeof(Header) == 8, "Header must stay eight bytes");
_Static_assert(CHAR_BIT == 8, "this code assumes octets");
_Static_assert(sizeof(int) >= 4, "int must hold a 32-bit value");
uint32_t header_id(const Header *h) {
return h->id;
}
Cómo funciona
- Recibe una expresión constante y un mensaje.
- Los supuestos de disposición y tamaño son los sujetos habituales.
- No hay costo alguno en tiempo de ejecución.
Palabras clave y builtins usados aquí
_Static_assertconstintreturnsizeofstructtypedefuint32_t
El intento, en números
- Líneas
- 15
- Caracteres a escribir
- 346
- Tokens
- 76
- Ritmo de tres estrellas
- 100 tpm
Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 46 segundos.
Paso 2 de 2 en Aserciones; paso 11 de 12 en Preprocesador y encabezados.