Las funciones de callback son funciones cuyo адрес se pasa como argumento a otra función. Esto permite implementar manejadores de eventos, algoritmos personalizados y complementos.
Declaración de una función de callback:
typedef void (*callback_func_t)(int);
void process(callback_func_t cb) { // ... cb(42); // llamada a callback } void handler(int n) { printf("Número procesado: %d ", n); } int main() { process(handler); return 0; }
Consejos:
¿Se puede pasar una función con una firma no coincidente como callback?
Respuesta errónea común: «Sí, C lo permitirá si se declara un casting explícito».
Respuesta correcta: Aunque el casting formal es posible, la llamada a tal función resultará en comportamiento indefinido, ya que se pueden pasar valores incorrectos a los parámetros, dañando la pila.
Ejemplo de peligro:
typedef void (*cb_t)(int); void wrong_cb(double d) { printf("%f ", d); } void call(cb_t f) { f(123); } int main() { call((cb_t)wrong_cb); } // PELIGROSO: las firmas difieren
Historia
Historia
Historia
Al desarrollar un sistema multiplataforma, el autor definió incorrectamente la convención de llamada para las funciones de callback. Esto no se manifestaba en un sistema operativo, pero causaba que el programa fallara en otro al llamar a callbacks desde una biblioteca C.