La maggior parte delle funzioni accettano un numero fisso di argomenti . Alcune applicazioni , tuttavia, richiedono funzioni di accettare parametri variabili . Un esempio ben noto è la funzione di stampa del C. Per tali casi, C + + offre una potente soluzione che consente al compilatore di decifrare gli argomenti in fase di esecuzione . Continua a leggere per un tutorial che illustra come implementare tali funzioni . Cose che ti serviranno
Intermedio C + + Commercio compilatore C + + con IDE , ad esempio Microsoft Visual C + +
Mostra Altre istruzioni
1
Aggiungi il file della libreria stdarg.h in il vostro programma . Ecco dove si definiscono le macro . Sulla prima riga del file , inserire # include .
2
utilizzare le macro va_arg , va_start e v_end che collaborano con il va_type in stdarg.h .
3
Stabilire una variabile di tipo va_list di funzionare come un marcatore di lista .
4
accedere ai singoli parametri utilizzando la macro va_arg . Trovare un modo per dire al macro va_arg che tipo di argomento si vuole recuperare per fornire il giusto numero di byte dalla pila.
5
Cast il risultato dal punto 4 per il tipo desiderato di essere .
6
chiamare la macro va_end per terminare la lavorazione di parametri variabili .
7
Guardate l'esempio qui sotto che illustra i punti 2 a 6. Funzione accetta myprintf una stringa di formato che specifica il tipo e la posizione di ogni argomento . In seguito la stringa di formato è la lista degli argomenti . La funzione consente di stampare gli argomenti . Per semplicità si può elaborare solo int, float e char :
//dichiarazione
vuoto myprintf ( char * format , ... ) ;
//definizione a
vuoto myprintf ( formato char * , . .. ) {
va_list vl ;
int i;
va_start ( vl , args) ;
for (i = 0; args [ i] = '\\ 0' ; ! + + i) {
unione any_t
{ int i;
float f ;
char c ; }
qualsiasi ;
se ( 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 , char) ;
printf (" % c \\ n" , any.c ) ;
} else {
buttare SomeException ;
}
va_end ( vl ) ; }