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 di C. Per questi casi, C++ offre una potente soluzione che consente al compilatore di decifrare gli argomenti in fase di esecuzione. Continua a leggere per un'esercitazione in cui viene illustrato come implementare tali funzioni.
Istruzioni
1
Aggiungere il STDARG. File di libreria di H nel vostro programma. Che viene utilizzato per definire le macro. Nella prima riga del file, inserire #include < stdarg.h >.
2
Utilizzare la macro va_arg, va_start e v_end che collaborano con la 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 raccontare la macro va_arg che tipo di argomento si desidera recuperare per fornire il giusto numero di byte dallo stack.
5
Il cast del risultato dal punto 4 per il tipo desiderato che fosse.
6
Chiamare la macro va_end per terminare l'elaborazione di parametri variabili.
7
Guardate l'esempio qui sotto che illustra i passaggi 2 a 6. Funzione myprintf accetta una stringa di formato che specifica il tipo e la posizione di ciascun argomento. Dopo la stringa di formato è l'elenco di argomenti. La funzione consente di stampare gli argomenti. Per semplicità può elaborare solo int, float e char:
Dichiarazione
void myprintf (char formato,...);
defintion void myprintf (char
va_list vl;
int i;
va_start (vl, args);
per (i = 0; args [i]! = '\0'; + + i) {
dell'Unione any_t {
int i;
float f;
char c;
} qualsiasi;
Se (args [i] = = 'i') {
any.i = va_arg( vl, int );<br>
printf( "%i\n", any.i );<br>
} else
Se (args [i] = = 'f') {
any.f = va_arg( vl, float );<br>
printf( "%f\n", any.f );<br>
} else
Se (args [i] = = 'c') {
any.c = va_arg( vl, char );<br>
printf( "%c\n", any.c );<br>
}
else {
gettare SomeException;
}
va_end (vl);
}