-
Cómo utilizar la función de devolución de llamada en C
-
son funciones de devolución de funciones avanzadas en lenguaje de programación C. Una función de devolución de llamada ayuda en el aislamiento de la aplicación de una función de biblioteca de la persona que llama de la biblioteca. Al hacer esto, la biblioteca puede ahora ser desarrollada de forma independiente y sin ningún conocimiento de la aplicación que se va a llamar a la función de la biblioteca. Esto ayuda en la generación de código compacto. Además, también ayuda en el desarrollo paralelo, ya que la persona que escribe la biblioteca no tiene que esperar a que la persona que escribe la aplicación, y viceversa.Instrucciones
Las funciones de devolución de llamada
1 Aprender a escribir código C con punteros de función. punteros de función son como cualquier otro punteros en C, excepto que ellos tienen la dirección de una función. El segmento de código siguiente es un ejemplo sencillo con punteros de función.
incluir <stdio.h>
int printHello () {printf ("Hello\n");
}
int printHi () {
printf ("Hi\n");
}
int main (int argc, char * argv []) {
// Declare a function pointer
int (* p) (void);
// Ponga el puntero de función en la dirección de una función
p = printHello;
pag();
// Apunte el puntero de función a la dirección de otra función
p = printHi;
pag();
}
2 Decidir sobre qué función de devolución de llamada que es apropiado para el programa. Por ejemplo, el siguiente segmento de código compara o bien dos números enteros o dos cadenas de caracteres en función del valor de la tercera argumento llamado "opción". Si dos números enteros están siendo comparados, la función devuelve un valor de 1 si el primer número es mayor que el otro. Si se comparan dos cadenas de caracteres, la función devuelve un valor de 1 si la cadena primer carácter tiene más caracteres que el segundo.
int callback (void
una, nula b, opción int) {
if (option == 0) {
int * c = (int *) a;
int * d = (int *) b;
retorno (c *> * d);
} Else if (opción == 1) {
char * c = (char *) a;
char * d = (char *) b;
retorno (strlen (c)> strlen (d));
}
}
3 Llame a la función de devolución de llamada desde el código fuente. Supongamos que un algoritmo de burbuja, especie está siendo escrito por un programador. Este algoritmo ordena los valores de una lista en orden decreciente. El siguiente segmento de código llama a la función de devolución de llamada llamada "Func", que va a hacer la comparación.
int BubbleSort(valores int, int len, int (func) (anular una, nula b, int c)) {
int (*p)(void *m, void *n, int p);
int i, j;
p = func;
for (i = 0; i & lt; len; i ++) {
for (j = 0; j & lt; i; j ++) {
si (P (y los valores de [i], y los valores de [J], 0)) {
int t = valores [i];
Los valores [i] = valores [j];
Los valores [j] = T;
}
}
}
}
4 Llame a la función que invoca la función de devolución de llamada desde el programa principal que requiere que el resultado de la ordenación. Para el ejemplo de la burbuja-tipo, la función "principal" llama a la función de la burbuja-tipo con la función de devolución de llamada especificada en el paso 2.
int main (int argc, char * argv []) {int i;
int a [5] = {4, 2, 5, 9, 1};
BubbleSort (a, 5, devolución de llamada);
for (i = 0; i & lt; 5; i ++) {
printf ( "% d \ n", a [i]);
}
}
Consejos y advertencias
- Cuando un equipo está desarrollando las funciones de devolución de llamada y el otro equipo está desarrollando la aplicación en paralelo, es recomendable estar de acuerdo con los nombres y usos previstos de las funciones de devolución de antemano.