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
- La etiqueta y la unión viajan juntas en un struct.
- Un switch sobre la etiqueta es la única forma segura de leerla.
- Así representan los valores los intérpretes.
Palabras clave y builtins usados aquí
casecharconstdefaultdoubleenumlongreturnstructswitchtypedefunion
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.
Paso 2 de 5 en Uniones y disposición; paso 2 de 13 en Uniones, campos de bits y comportamiento indefinido.