|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6789
|
[C] Passaggio di argomenti a funzione variabile
Ciao a tutti,
sto cercando una soluzione elegante ad un problema magari stupido, ma che al momento non trovo. Ho una funzione con all'interno 3 casi possibili definiti mediante switch-case. Solo se siamo nel primo caso ho bisogno di un parametro passato alla funzione, negli altri casi non serve ( pseudo-C-codice): Codice:
funzione(){
switch(a){
case(1):
// serve un argomento
case(2): // non serve
case(3):// non serve
};
}
La prima cosa che farei è utilizzare le ellissi e le va_list: Codice:
funzione(int num_argomenti, ...){
...
switch(a){
case(1):
// serve un argomento
case(2): // non serve
case(3):// non serve
};
}
|
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Aug 2010
Messaggi: 264
|
dipende da cosa ti serve, comunque potresti usare un parametro predefinito. Per esempio, se ti serve un int potresti mettere il valore del parametro predefinito a -1 mentre quando ti serve usi quello che vuoi
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2788
|
Secondo me la soluzione migliore sarebbe separare il caso (1) dagli altri due, ma immagino ci sia un motivo per cui vuoi tenerli insieme. Quale?
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6789
|
Perché dopo quella serie di switch-case fanno tutti la stessa cosa, quindi separarli in più funzioni è brutto dal punto di vista logico.
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2788
|
Potresti far diventare una funzione anche quella "stessa cosa".
|
|
|
|
|
|
#6 | |
|
Member
Iscritto dal: May 2009
Messaggi: 186
|
Quote:
Per esempio: Codice:
void funz(int a, ...)
{
va_list ap;
int arg;
va_start(ap, a);
arg = va_arg(ap, int);
va_end(ap);
switch (a)
{
case 1: // << qui userai una costante vero?
printf("Parametro: %d\n", arg);
break;
default:
printf("Nessun parametro\n");
break;
}
}
|
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Aug 2010
Messaggi: 264
|
non vedo perchè dovrebbe farsi tutte le "pippe mentali" con va_list quando con un parametro opzionale avrebbe risolto
|
|
|
|
|
|
#8 | |
|
Member
Iscritto dal: May 2009
Messaggi: 186
|
Quote:
2) Definisci "parametro opzionale" (meglio un esempio) 3) Mi pare che l'OP abbia già detto "Ma non mi piace molto" quindi si cercavano altre soluzioni... |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:31.




















