typestar

X-macros en C

Una lista, varias expansiones: la tabla y el código quedan en sintonía por construcción.

#include <stdio.h>

#define STATES(X) \
    X(IDLE) \
    X(RUNNING) \
    X(DONE)

#define AS_ENUM(name) STATE_##name,
#define AS_STRING(name) #name,

typedef enum { STATES(AS_ENUM) STATE_COUNT } State;

static const char *names[] = {STATES(AS_STRING)};

void list_states(void) {
    for (int i = 0; i < STATE_COUNT; i++) {
        printf("%d = %s\n", i, names[i]);
    }
}

Cómo funciona

  1. La lista es una macro que llama a una macro por elemento.
  2. Redefinir esa macro reutiliza la lista para un nuevo propósito.
  3. Agregar un elemento actualiza el enum y los nombres juntos.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
19
Caracteres a escribir
346
Tokens
77
Ritmo de tres estrellas
100 tpm

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

Escribe este fragmento

Paso 3 de 3 en Manipulación de texto; paso 7 de 12 en Preprocesador y encabezados.

← Anterior Siguiente →