De fleste funksjonene godta et fast antall argumenter. Noen anvendelser krever imidlertid funksjoner for å ta imot variable parametere . Et velkjent eksempel er print funksjon av C. For slike tilfeller , C + + tilbyr en kraftig løsning som lar kompilatoren dechiffrere argumentene under kjøring. Les videre for en tutorial som demonstrerer hvordan å implementere slike funksjoner . Du trenger
Intermediate C + + Online C + + kompilator med IDE , for eksempel Microsoft Visual C + +
Vis flere instruksjoner
en
Legg til STDARG.H bibliotek filen inn programmet . Det er der du definere makroer . På den første linjen i filen , setter # include .
2
Bruk makroer va_arg , va_start og v_end som samarbeider med va_type i stdarg.h .
3
etablere en variabel av typen va_list å fungere som en liste markør.
4
tilgang til de enkelte parametere ved hjelp av va_arg makro. Finn en måte å fortelle va_arg makro hva slags argument du vil den skal hente å levere riktig antall bytes fra bunken.
5
resultatet fra trinn 4 til den typen du vil ha det å være.
6
Ring va_end makro til å avslutte behandlingen av variable parametre .
7
Se på eksempelet nedenfor som viser trinn 2 til 6 . Funksjon aksepterer myprintf et format streng som angir type og plassering av hvert argument . Etter format string er listen over argumenter. Funksjonen skriver ut argumentene . For enkelhets skyld kan det bare behandle int , float og røye : Twitter //erklæring
void myprintf ( char * format , ...); Twitter //defintion
void myprintf ( char * format, . ..) {
va_list vl ;
int i;
va_start ( vl , args ) ;
for (i = 0; args [ i] = '\\ 0 '; ! + + i) {
union any_t {
int i;
float f ;
røye c ;
} noen;
if ( args [ i] == 'i' ) {
any.i = va_arg ( vl , int ) ;
printf ( "% i \\ n" , any.i ) ;
} else
if ( args [ i] == ' f' ) {
any.f = va_arg ( vl , float ) ;
printf ( "% f \\ n" , any.f ) ;
} else
if ( args [ i] == ' c' ) {
any.c = va_arg ( vl , røye ) ;
printf ( "% c \\ n" , any.c ) ;
}
else {
kaste SomeException ;
}
va_end ( vl ) ;
}