Uniones en C
Un bloque de almacenamiento, varias interpretaciones — pero solo una válida a la vez.
#include <stdio.h>
typedef union {
int as_int;
float as_float;
unsigned char bytes[4];
} Word;
void inspect(void) {
Word w;
w.as_int = 1;
printf("size %zu\n", sizeof w);
printf("bytes %u %u %u %u\n", w.bytes[0], w.bytes[1], w.bytes[2],
w.bytes[3]);
w.as_float = 1.0f;
printf("float bits %08x\n", (unsigned) w.as_int);
}
Cómo funciona
- El tamaño es el del miembro más grande.
- Escribir un miembro y leer otro es type punning.
- Un campo de etiqueta es lo que mantiene honesta a una unión.
Palabras clave y builtins usados aquí
charfloatintsizeoftypedefunionunsignedvoid
El intento, en números
- Líneas
- 19
- Caracteres a escribir
- 323
- Tokens
- 106
- Ritmo de tres estrellas
- 100 tpm
Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 64 segundos.
Paso 1 de 5 en Uniones y disposición; paso 1 de 13 en Uniones, campos de bits y comportamiento indefinido.