Terugbellen functies zijn geavanceerde functies in C -programmeertaal . Een callback functie helpt bij het isoleren van de uitvoering van een functie uit de bibliotheek van de beller van de bibliotheek . Door dat te doen , de bibliotheek kan nu zelfstandig zonder enige kennis van de toepassing die gaat naar de functie bibliotheek noemen ontwikkeld . Dit helpt bij het genereren van compacte code . Verder , het helpt ook bij parallelle ontwikkeling , als de persoon die het schrijven van de bibliotheek hoeft niet te wachten op de persoon die het schrijven van de aanvraag , en vice versa . Wat je nodig hebt AC compiler zoals gcc editor zoals emacs of " vi " om het programma schrijven Toon Meer Aanwijzingen callbackfuncties 1 Leer om C -code te schrijven met de functie pointers . Functie pointers zijn als elke andere pointers in C , behalve dat zij in het bezit van het adres van een functie . De code segment hieronder is een eenvoudig voorbeeld met de functie pointers . # Include int printHello ( ) { printf ( " Hallo \\ n " ) ; } int printHi ( ) { printf ( " hallo \\ n " ) ; } int belangrijkste ( int argc , char * argv [ ] ) { //Declareer een functie pointer int ( * p ) (void ) op ; //Point de functie pointer aan het adres van een functie p = printHello ; p ( ) ; //Point de functie pointer om het adres van een andere functie p = printHi ; p ( ) op ; } 2 Beslis over wat callback functie is geschikt voor het programma . Bijvoorbeeld , de volgende code segment vergelijkt ofwel twee integers of twee tekenreeksen afhankelijk van de waarde van het derde argument genaamd " optie . " Indien twee getallen worden vergeleken , de functie een waarde van 1 als het eerste getal groter is dan de andere . Als twee tekenreeksen worden vergeleken , retourneert de functie een waarde van 1 als de eerste tekenreeks heeft meer tekens dan de tweede . Int callback (void * a , leegte * b , int optie ) { als ( optie == 0 ) { int * c = ( int * ) a ; int * d = ( int * ) b ; terugkeer ( * c > * d ) ; } anders als ( optie == 1 ) { char c = ( char * ) a * ; char * d = ( char * ) b ; terugkeer ( strlen ( c ) > strlen ( d ) ) ; } } 3 Roep de callback functie uit de broncode . Aannemen dat een bubble - sort -algoritme wordt geschreven door een programmeur . Dit algoritme sorteert de waarden in een lijst in afnemende volgorde . De volgende code segment noemt de callback functie genaamd " functie " , die de vergelijking zal doen . Int bubbleSort ( int * waarden , int len , int ( * func ) (void * a , leegte * b , int c ) ) { int ( * p ) (void * m , leegte * n , int p ) ; int i , j ; p = functie ; < br > for (i = 0 ; i < len ; i + + ) { voor ( j = 0 ; j < i , j + + ) { if ( p ( & waarden [ ,"i ] , en waarden [ j ] , 0 ) ) { int t = waarden [ i ] ; waarden [ i ] = waarden [ j ] ; waarden [ ,"j ] = t ; } } } } 4 Roep de functie die de callback beroept functie van het hoofdprogramma dat het resultaat van het soort vereist . Voor de bubble - sort bijvoorbeeld de "main " functie roept de bubble - sorteerfunctie met de callback functie gespecificeerd in stap 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 ] ) ; } } < br >
|