Nwlapcug.com


Come utilizzare il parametro variabile funzioni in C++

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 formato,...) {

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);

}