De meeste functies aanvaarden een vast aantal argumenten . Sommige toepassingen vereisen echter functies om variabele parameters te accepteren . Een bekend voorbeeld is de printfunctie van C. Voor dergelijke gevallen , C + + biedt een krachtige oplossing die de compiler het ontcijferen van de argumenten waarmee tijdens runtime . Lees verder voor een tutorial die laat zien hoe deze functies te implementeren . Wat je nodig hebt Intermediair C + + C + + compiler met IDE , zoals Microsoft Visual C + + Toon Meer Aanwijzingen 1 In het STDARG.H bibliotheek bestand in uw programma . Dat is waar je de macro's te definiëren . Op de eerste regel van het bestand , plaatst # bevatten . Kopen van 2 Gebruik de macro's va_arg , va_start en v_end die samenwerken met de va_type in stdarg.h . 3 Instelling van een variabele van het type va_list om te functioneren als een lijstmarkering . toegang 4 de individuele parameters met behulp van de va_arg macro . Vind een manier om de va_arg macro vertellen wat voor soort argument dat u wilt ophalen om het juiste aantal bytes leveren van de stapel . 5 Cast het resultaat van stap 4 tot het type dat u wilt te zijn . 6 Bel de va_end macro met de verwerking van variabele parameters te beëindigen . Kijk naar het voorbeeld hieronder die een goede illustratie stappen 02-06 juli . Functie aanvaardt myprintf een format string die het type en de positie van elk argument geeft . Na de format string is de lijst met argumenten . De functie print de argumenten . . ; Twitter //definitie nietig myprintf ( char * format , Twitter //aangifte nietig myprintf ( char * format , ... ) : Voor de eenvoud het kan alleen int , float en char verwerken .. ) { va_list vl ; int i ; va_start ( vl , args ) ; for (i = 0 ; args [ i ] = ' \\ 0 ' ; ! + + i ) { unie any_t { int i ; float f ; char c ; } elke ; if ( args [ i ] == ' i ' ) { any.i = va_arg ( vl , int ) ; printf ( " % i \\ n " , any.i ) ; } else if ( args [ i ] == ' f ' ) { < br > any.f = va_arg ( vl , float ) ; printf ( " % f \\ n " , any.f ) ; } else if ( args [ i ] == ' c ' ) { any.c = va_arg ( vl , char ) ; printf ( " % c \\ n " , any.c ) ; } else { gooien SomeException ; } va_end ( zw) ; }
|