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