Pointers a Funciones
Una función, como una variable, vive en una dirección — y C te permite almacenar esa dirección en un pointer. int (*operation)(int, int) declara a operation como un pointer a una función que toma dos ints y devuelve un int; asignarle un nombre de función (sin llamarla) almacena la dirección de esa función.
#include <stdio.h>
int add(int a, int b) { return a + b; }
int subtract(int a, int b) { return a - b; }
int main() {
int (*operation)(int, int) = add;
printf("%d\n", operation(5, 3));
operation = subtract;
printf("%d\n", operation(5, 3));
return 0;
}8 2
Llamar a operation(5, 3) llama a la función a la que operation apunta actualmente — add la primera vez, subtract después de la reasignación. Así es como C implementa callbacks y dynamic dispatch sin ninguna de la maquinaria de class o interface que otros lenguajes de este sitio usan para la misma idea.
A continuación: el preprocessor — un paso separado, puramente textual, que se ejecuta antes de que el compilador vea tu código.
Practice exercise
Escribe las funciones add(int,int) y subtract(int,int). Declara un pointer a función inicializado en add, llámalo con (5, 3) e imprime el resultado.