typestar

Una unión etiquetada en C

La manera de C de escribir un tipo suma: un enum que dice qué miembro está vivo.

typedef enum { VALUE_INT, VALUE_DOUBLE, VALUE_TEXT } Kind;

typedef struct {
    Kind kind;
    union {
        long as_int;
        double as_double;
        const char *as_text;
    } data;
} Value;

double as_number(const Value *v) {
    switch (v->kind) {
    case VALUE_INT:
        return (double) v->data.as_int;
    case VALUE_DOUBLE:
        return v->data.as_double;
    case VALUE_TEXT:
    default:
        return 0.0;
    }
}

Cómo funciona

  1. La etiqueta y la unión viajan juntas en un struct.
  2. Un switch sobre la etiqueta es la única forma segura de leerla.
  3. Así representan los valores los intérpretes.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
22
Caracteres a escribir
354
Tokens
88
Ritmo de tres estrellas
100 tpm

Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 53 segundos.

Escribe este fragmento

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

← Anterior Siguiente →