Home Hardware Networking Programmazione Software Domanda Sistemi
Conoscenza Informatica >> Programmazione >> C /C + + Programming >> .

Come utilizzare la funzione di callback in C

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

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 ;

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 [ ] ) {

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] ) ; }


}

 

Programmazione © www.354353.com