typestar

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

  1. El tamaño es el del miembro más grande.
  2. Escribir un miembro y leer otro es type punning.
  3. Un campo de etiqueta es lo que mantiene honesta a una unión.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 1 de 5 en Uniones y disposición; paso 1 de 13 en Uniones, campos de bits y comportamiento indefinido.

Siguiente →