Callbacks con contexto en C
La convención de C para un callback: el puntero a función más un puntero void tuyo.
typedef void (*Visitor)(int value, void *user);
void each(const int *values, size_t n, Visitor visit, void *user) {
for (size_t i = 0; i < n; i++) {
visit(values[i], user);
}
}
static void accumulate(int value, void *user) {
long *total = user;
*total += value;
}
long sum_via_callback(const int *values, size_t n) {
long total = 0;
each(values, n, accumulate, &total);
return total;
}
Cómo funciona
- El argumento
void *userlleva lo que quien llama necesite. - La biblioteca nunca lo inspecciona, solo lo devuelve.
- Así se ven qsort_r, los hilos y los bucles de eventos.
Palabras clave y builtins usados aquí
constforintlongreturnsize_tstatictypedefvoid
El intento, en números
- Líneas
- 18
- Caracteres a escribir
- 388
- Tokens
- 120
- Ritmo de tres estrellas
- 95 tpm
Al ritmo de tres estrellas de 95 tokens por minuto, este intento toma unos 76 segundos.
Paso 3 de 4 en Punteros genéricos y a funciones; paso 8 de 25 en Punteros y memoria.