Sådan bruges callback funktion i C

March 18

Sådan bruges callback funktion i C


Tilbagekald funktioner er avancerede funktioner i C programmeringssprog. En callback funktion hjælper med at isolere gennemførelsen af ​​et bibliotek funktion fra den, der ringer af biblioteket. Ved at gøre det, kan biblioteket nu udviklet uafhængigt uden nogen viden om det program, der kommer til at kalde biblioteksfunktionen. Dette hjælper med at skabe kompakt kode. Endvidere, det hjælper også i parallel udvikling, som den person, skriver biblioteket behøver ikke vente på den person, skrive ansøgningen, og vice versa.

Instruktioner

tilbagekald funktioner

1 Lær at skrive C-kode med funktionspointere. Funktion pointere er ligesom alle andre pejlemærker i C, bortset fra at de holder adressen på en funktion. Kodesegmentet nedenfor er et simpelt eksempel med funktionspointere.

omfatter <stdio.h>

int printHello () {

printf ("Hello\n");

}

int printHi () {

printf ("Hi\n");

}

int main (int argc, char * argv []) {

// Declare a function pointer

int (* p) (void);

// Peg funktionen pointer til adressen på en funktion

p = printHello;

p ();

// Peg funktionen pointer til adressen på en anden funktion

p = printHi;

p ();

}

2 Beslut dig for, hvad callback funktion er passende for programmet. For eksempel følgende kode segment sammenligner enten to heltal eller to tegnstrenge afhængigt af værdien af ​​det tredje argument kaldet "valgmulighed." Hvis to heltal sammenlignes, returnerer funktionen værdien 1, hvis det første tal er større end den anden. Hvis to tegnstrenge sammenlignes, returnerer funktionen værdien 1 hvis den første tegnstreng har flere tegn end den anden.

int tilbagekald (annullere

en, ugyldig b, int option) {

if (option == 0) {

int * c = (int *) a;

int * d = (int *) b;

tilbagevenden (* c> * d);

} Else if (option == 1) {

char * c = (char *) a;

char * d = (char *) b;

tilbagevenden (strlen (c)> strlen (d));

}

}

3 Ring til tilbagekald funktion fra kildekoden. Antag at en boble-sortering algoritme bliver skrevet af en programmør. Denne algoritme sorterer værdier i en liste i faldende orden. Følgende kode segment kalder callback funktion kaldes "func", som vil gøre sammenligningen.

int boblesortering (int

værdier, int len, int (func) (annullere en, ugyldig b, int c)) {

int (*p)(void *m, void *n, int p);

int i, j;

p = funk;

for (i = 0; i & lt; len, i ++) {

for (j = 0; j & lt; i; j ++) {

hvis (p (& værdier [i], og værdier [j], 0)) {

int t = værdier [I];

værdier [i] = værdier [j];

værdier [j] = t;

}

}

}

}

4 Kald den funktion, der påberåber callback funktion fra de vigtigste program, der kræver et resultat af den slags. For boble-sortering eksempel "main" funktion kalder boble-sorteringsfunktionen med callback funktion er angivet i trin 2.

int main (int argc, char * argv []) {

int i;

int a [5] = {4, 2, 5, 9, 1};

boblesortering (a, 5, tilbagekald);

for (i = 0; i & lt; 5; i ++) {

printf ( "% d \ n", en [i]);

}

}

TIPS

  • Når et hold er ved at udvikle de callback funktioner og det andet hold er ved at udvikle anvendelsen parallelt, er det tilrådeligt at være enige om navne og påtænkte anvendelse af callback funktioner på forhånd.