typestar

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

  1. El argumento void *user lleva lo que quien llama necesite.
  2. La biblioteca nunca lo inspecciona, solo lo devuelve.
  3. Así se ven qsort_r, los hilos y los bucles de eventos.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 3 de 4 en Punteros genéricos y a funciones; paso 8 de 25 en Punteros y memoria.

← Anterior Siguiente →