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
- La lista es una macro que llama a una macro por elemento.
- Redefinir esa macro reutiliza la lista para un nuevo propósito.
- Agregar un elemento actualiza el enum y los nombres juntos.
Palabras clave y builtins usados aquí
charconstenumforintstatictypedefvoid
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.
Paso 3 de 3 en Manipulación de texto; paso 7 de 12 en Preprocesador y encabezados.