Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky

Domáce Hardware Siete Programovanie Softvér Otázka Systémy

Ako používať spätné volanie funkcie v jazyku C

Funkcia spätného volania sú pokročilé funkcie v programovacom jazyku C. Funkcia spätného volania pomáha izolovať vykonávanie funkcie knižnice od volajúceho knižnice . Tým , že knižnica je teraz možné rozvíjať samostatne , bez akejkoľvek znalosti o aplikáciu, ktorá sa bude volať funkciu knižnice . To pomáha pri vytváraní kompaktného kódu . Ďalej , to tiež pomáha pri paralelnom vývojom , ako osoba písanie knižnice nemusí čakať na osobu písanie žiadosti , a vice versa . Veci , ktoré budete potrebovať
AC kompilátor ako je gcc
editora , ako je emacs alebo " vi " napísať program
Zobraziť ďalšie inštrukcie
funkcie spätného volania
1

Naučte sa písať kód v C s funkčnými ukazovateľmi . Ukazovatele funkcií sú ako všetky ostatné ukazovatele v C , okrem toho , že sú držiteľmi adresu funkcie . Kód segmentu nižšie je jednoduchý príklad s funkčnými ukazovateľmi .

# Include

int printHello ( ) {

printf ( " Hello \\ n" ) ;

}

int printHi ( ) {

printf ( " Ahoj \\ n" ) ;

}

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

//deklarovať ukazovateľ funkcie

int ( * p ) ( void ) ;

//bod funkcie ukazovateľ na adresu funkcie

p = printHello ;

p ( ) ;

//bod funkcie ukazovateľ na adresu inú funkciu

p = printHi ;

p ( ) ;

}
2

Rozhodnite o tom , čo callback funkcia je vhodné pre tento program . Napríklad nasledujúci kód segmentu porovnáva buď dve celé čísla alebo dva reťazce znakov v závislosti na hodnote tretí argument s názvom " možnosť . " Ak sú dve celé čísla sú porovnávané , funkcia vracia hodnotu 1 v prípade , že prvé číslo je väčšie ako druhý . Ak sú porovnávané dva znakové reťazce , funkcia vráti hodnotu 1 , ak je prvý znak reťazca má viac znakov ako sekundu .

Int callback ( void * , void * b , int voľba ) {

if ( voľba == 0 ) {

int * c = ( int * ) ;

int * d = ( int * ) b ;

návrat ( * c > * d ) ;

} else if ( voľba == 1 ) {

char * c = ( char * ) ;

char * d = ( char * ) b ;

vrátiť ( strlen ( c ) > strlen ( d ) ) ;

}

}
3

volanie funkcie spätného volania zo zdrojového kódu . Predpokladajme , že bubble - sort algoritmus je napísaný programátorom . Tento algoritmus zoradia hodnoty v zozname v zostupnom poradí . Nasledujúci úsek kódu volá funkciu spätného volania s názvom " funkcie " , ktorý bude robiť porovnanie .

Int bubblesort ( int * hodnoty , int ľan , int ( * func ) ( void * , void * b , int c ) ) {

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

int i , j ;

p = funkcie ;

for ( i = 0 ; i < ľan ; i + + ) {

for ( j = 0 ; j < i , j + + ) {

if ( p ( a hodnoty [ ,"i ] , a hodnoty [ j ] , 0 ) ) {

int t = hodnota [ i ] ;

hodnoty [ i ] = hodnota [ j ] ;

hodnoty [ ,"j ] = t ;

}

}

}

}
4

volanie funkcie , ktorá vyvolá spätné volanie funkcie z hlavného programu , ktorý vyžaduje výsledok druhu . Pre príklad bubble - sort , " hlavné " funkcia volá funkciu bubble - sort s funkciou spätného volania zadanej v kroku 2.

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

int i ; celým

int [ 5 ] = { 4 , 2 , 5 , 9 , 1 } , celým

bubblesort ( a , 5 , spätné volanie ) ; celým

for ( i = 0 ; i < 5 ; i + + ) {

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

}

}

Najnovšie články

Copyright © počítačové znalosti Všetky práva vyhradené