Le funzioni di callback sono funzionalità avanzate in linguaggio di programmazione C . Una funzione callback aiuta a isolare l'attuazione di una funzione di libreria dal chiamante della libreria. In tal modo, la libreria può essere sviluppato in modo indipendente , senza alcuna conoscenza dell'applicazione che sta per chiamare la funzione di libreria . Questo aiuta a generare codice compatto . Inoltre , aiuta anche a sviluppo parallelo , come la persona che scrive la libreria non deve aspettare la persona scrittura dell'applicazione , e viceversa . Cose che ti serviranno
AC compilatore come gcc
editor come emacs o "vi" per scrivere il programma
Mostra più istruzioni
funzioni di callback
1 < p > Imparare a scrivere codice C con puntatori a funzione . Puntatori a funzione sono simili ai puntatori in C , salvo che siano in possesso l'indirizzo di una funzione . Il segmento di codice riportato di seguito è un esempio semplice con i puntatori a funzione .
# Include
int PrintHello ( ) {
printf ( " Ciao \\ n" ) ;
}
int printHi ( ) {
printf ( "Ciao \\ n"); }
int main ( int argc , char * argv [ ] ) {
//Dichiara una funzione puntatore
( * p ) ( void) int ;
//Point il puntatore a funzione l' indirizzo di una funzione
p = PrintHello ;
p ();
//Point il puntatore a funzione per l'indirizzo di un'altra funzione
p = printHi ;
p (); }
2
decidere su ciò che la funzione di callback è appropriato per il programma . Ad esempio, il seguente segmento di codice a confronto sia due numeri interi o due stringhe di caratteri in base al valore del terzo argomento denominato " opzione ". Se due numeri interi vengono confrontati , la funzione restituisce il valore 1 se il primo numero è maggiore dell'altra . Se due stringhe di caratteri vengono confrontati , la funzione restituisce un valore pari a 1 se la prima stringa di caratteri ha più caratteri al secondo .
Int callback (void * a, void * b , int opzione ) {
if ( opzione == 0 ) {
int * c = ( int *) a;
int * d = ( int * ) b ;
ritorno ( * c > * d);
} else if ( scelta == 1) {
char * c = ( char *) a;
char * d = ( char * ) b ;
ritorno ( strlen ( c ) > strlen ( d ) ) ; }
}
3
Chiamare la funzione di richiamata dal codice sorgente . Si supponga che un algoritmo bubble -sort è stato scritto da un programmatore . Questo algoritmo ordina i valori in una graduatoria decrescente . Il seguente frammento di codice chiama la funzione di callback chiamata " funzione ", che farà il confronto .
Int bubblesort ( int * valori , int len , int ( * func ) (void * a, void * b , int c ) ) {
int ( * p ) (void * m , void * n , int p) ;
int i , j ;
p = func ; < br >
for (i = 0; i < len , i + + ) {
for ( j = 0; j
se ( p ( e valori [ ,"i], e valori [j ] , 0 ) ) {
int t = valori [ i];
valori
[ i] = valori [j] ;
valori
[ ,"j ] = t ;
}
}
}
}
4
Chiama la funzione che richiama il callback funzione dal programma principale che richiede il risultato dell'ordinamento . Per l'esempio di bubble -sort , la funzione " main" chiama la funzione bubble -sort con la funzione di callback specificato al punto 2.
Int main ( int argc , char * argv [ ] ) {
< p > int i;
int a [ 5] = { 4 , 2 , 5 , 9 , 1 } ;
bubblesort (a, 5 , callback) ;
for (i = 0; i < 5; i + + ) {
printf ( "% d \\ n" , a [i] ) ; }
}