Salve.
Come si può specificare una funzione con un elenco di argomenti variabili?
Sapevo che in C si faceva cosi
ma poi come si fa a contare gli argomenti che ci sono? Ho letto va_list ma non saprei.codice:void foo(...);
E in C++ come si fa?
Salve.
Come si può specificare una funzione con un elenco di argomenti variabili?
Sapevo che in C si faceva cosi
ma poi come si fa a contare gli argomenti che ci sono? Ho letto va_list ma non saprei.codice:void foo(...);
E in C++ come si fa?
"Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)
"Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)
http://xvincentx.netsons.org/programBlog
che io sappia CONTARE non puoi...
a meno che in un paramentro non passi il numero degli argomenti
DYNAMIC+ [ E-mail ]
Secondo me non si può fare!
hoop
"Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)
"Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)
http://xvincentx.netsons.org/programBlog
Ho scritto un semplice esempio che si spiega da solo ...
ma ce ne sono tanti su Internet ...codice:#include <iostream> #include <stdarg.h> using namespace std; float media( int n, ... ) { va_list pp; float med = 0.0f; float sum = 0.0f; if(n) { va_start(pp, n); for (int ix = 0; ix < n; ix++) sum += va_arg(pp, float); va_end(pp); med = sum/n; } return(med); } void main() { cout << "Media: " << media(3, 1.0f, 2.0f, 3.0f) << endl; cout << "Media: " << media(5, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f) << endl; cout << "Media: " << media(2, 10.0f, 20.0f) << endl; }
sum += va_arg(pp, float);
Questa riga non mi è chiara. Prendo un argomento da pp (quale argomento? e float cosa vuol dire? il tipo di argomento pssato?
"Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)
"Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)
http://xvincentx.netsons.org/programBlog
Ottieni il "prossimo" argomento di tipo float e sommalo a sum.
Per info sulla macro va_arg leggi qui
Ok ora mi è completamente chiaro.
Leggendo però su internet ho letto,riguardo gli elenchi variabili di argomenti
In C++ l'overloading delle funzioni effetua le stesse operazioni delle liste variabili di argomenti in C
eppure io non trovo il nesso logico...
L'overloading delle funzioni sarebbe
codice:int ciao(int,int)Questo è l'overloading delle funzioni...e cosa c'entra??codice:double ciao(double,double)
"Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)
"Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)
http://xvincentx.netsons.org/programBlog
Nel senso (limitato) che se hai una funzione in C che usa gli argomenti variabili perche' puo' riceverne 1, 2 o 3, allora in C++ puoi dichiarare le 3 funzioni
int ciao(int op1);
int ciao(int op1, int op2);
int ciao(int op1, int op2, int op3);
e una qualsiasi chiamata del tipo
ciao(1);
ciao(1, 2);
ciao(1, 2, 3);
funzionerà ugualmente, dandoti l'impressione che la funzione ciao lavori come se avesse gli argomenti variabili.
Questo però deve essere: sum+=(float)va_arg(pp,double);Originariamente inviato da oregon
codice:sum += va_arg(pp, float);
giustamente ci vuole il cast.
"Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)
"Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)
http://xvincentx.netsons.org/programBlog