funções de retorno de chamada são recursos avançados em linguagem de programação C . A função de retorno ajuda a isolar a implementação de uma função de biblioteca do chamador da biblioteca. Ao fazer isso , a biblioteca agora pode ser desenvolvido de forma independente , sem qualquer conhecimento da aplicação que vai chamar a função da biblioteca. Isso ajuda na geração de código compacto. Além disso, ele também ajuda no desenvolvimento paralelo , como a pessoa que escreve a biblioteca não precisa esperar a pessoa a escrever a aplicação , e vice- versa. Coisas que você precisa 
 compilador AC como gcc 
 editor como o emacs ou "vi" para escrever o programa 
 Show Mais instruções 
 funções de callback 
 1 
 Aprenda a escrever código C com ponteiros de função . Ponteiros de função são como quaisquer outros ponteiros em C , exceto que eles têm o endereço de uma função . O segmento de código a seguir é um exemplo simples, com ponteiros de função . 
 
 # Include int 
 
 imprimeAlo () { 
 
 printf (" Olá \\ n" ); 
 
 } 
 
 int printHi () { 
 
 printf (" Olá \\ n"); } 
 
 
 
 int main (int argc , char * argv [ ] ) { 
 
 //Declara um ponteiro de função 
 
 int ( * p) (void); 
 
 //Aponte o ponteiro de função para o endereço de uma função 
 
 p = imprimeAlo ; 
 
 p (); 
 
 //Aponte o ponteiro de função para o endereço de outra função 
 
 p = printHi ; 
 
 p (); } 
 
 
 2 
 Decidir sobre qual a função de retorno de chamada é apropriado para o programa. Por exemplo , o segmento de código seguinte compara quer dois inteiros ou duas cadeias de caracteres , dependendo do valor do terceiro argumento chamado " opção ". Se dois inteiros são comparados, a função retorna um valor de 1 se o primeiro número é maior do que o outro . Se duas cadeias de caracteres são comparados , a função retorna um valor de 1 se a primeira seqüência de caracteres tem mais caracteres do que o segundo 
 
 int callback. (Void * a, void * b, opção int) { 
 
 if ( opção == 0 ) { 
 
 int * c = (int *) a; 
 
 int * d = (int *) b; 
 
 retorno (* c> * d); 
 
 } else if ( opção == 1) { 
 
 char * c = (char * ) a; 
 
 char * d = ( char *) b; 
 
 voltar ( strlen ( c) > strlen ( d ) ); } 
 
 
 
 } 
 3 
 Chame a função de retorno de chamada a partir do código fonte. Suponha que um algoritmo bubble -sort está sendo escrito por um programador. Este algoritmo classifica os valores em uma lista , em ordem decrescente . O seguinte segmento de código chama a função callback chamada " função ", que vai fazer a comparação . 
 
 Int BubbleSort ( int * valores , 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 < i, j + +) { 
 
 if ( p ( e valores [ ,"i], e valores [j] , 0)) { 
 
 int t = valores [ i ]; 
 
 valores [i] = valores [ j ]; 
 
 valores [ ,"j] = t; 
 
 } 
 
 } 
 
 } 
 
 } 
 4 
 Chame a função que chama o callback funcionar a partir do programa principal que requer o resultado do tipo. Para o exemplo da bolha - tipo , a função "main" chama a função bubble -sort com a função de retorno de chamada especificado na Etapa 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 ]); } 
 
 
 
 }