|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Nov 2010
Messaggi: 211
|
[C] Argomenti opzionali funzione
Ciao,
posso rendere facoltativo un parametro di una funzione? mettiamo di avere int a(int, int, int); richiamando questa funzione devo scrivere qualcosa tipo a(2,6,0); ma io vorrei poter scrivere anche solo a(2,6); l'ordine dei parametri rimane il medesimo: se la funzione prevede 3 parametri ed io ne inserisco 2 saranno i primi 2 ad avere un valore mentre il terzo (anche se ha delle celle allocate) non viene inizializzato con alcun valore oppure gli viene impostato un valore a scelta, non ha importanza allora è possibile in C ? |
|
|
|
|
|
#2 | |
|
Member
Iscritto dal: May 2011
Messaggi: 39
|
Quote:
|
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
In C++ e C# 4.0 ci sono i parametri di default, cioè
Codice:
void funzione( int a, int b, const char* c = NULL, int d = 0 ); //è valido sia funzione( 1,2 ); //che funzione( 1,2, "lol" ); //che funzione( 1,2, "lol", 99 ); |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
Questo potrebbe fare al caso tuo http://www.thinkage.ca/english/gcos/...cl/stdarg.html
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
sì boh, a sto punto fai prima a farti un wrapper
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 182
|
La soluzione più pulita, che evita ridondanze nel codice, che mi viene in mente è la seguente:
Codice:
int main()
{
funzione2(a,b);
funzione(a,b,c)
}
void funzione2(int a, int b)
{
funzione(a,b,0);
}
void funzione(int a, int b,int c)
{
...
}
PS: credo sia la stessa soluzione proposta da tuccio. Ultima modifica di oNaSsIs : 13-06-2011 alle 11:39. |
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Nov 2010
Messaggi: 211
|
ok allora non si può fare
grazie per le risposte preferisco evitare di far eseguire due funzioni piuttosto che una sola |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
|
|
|
|
|
|
#9 |
|
Member
Iscritto dal: May 2011
Messaggi: 39
|
Comunque mi pare di aver letto che quando non si vuole specificare un parametro da passare, basta scrivere nella funzione l'ellissi (3 punti) in corrispondenza del parametro
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
E' anche C
http://linux.die.net/man/3/sprintf infatti include la libreria stdarg.h http://en.wikipedia.org/wiki/Stdarg.h L'ho scritto anche prima... edit: deprecated in C++ |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
Quote:
comunque bisogna avere l'accortezza di inserire almeno un parametro |
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
C'era la pratica sadomaso, qualche anno fa, di andare a sfrucugliare direttamente nello stack. Sapendo che i parametri vengono messi nello stack con una push cosi' come vengono trovati, avendo l'indirizzo di un parametro si puo' risalire a tutti gli altri, anche se non li hai dichiarati. La sintassi K&R ovviamente non lo proibiva, quindi uno poteva scrivere Codice:
call_func(a,b,c,d,e,f,g,h,i); Codice:
void call_func(a)
int a
{
int *p = &a;
--p;
int b = *p;
}
__________________
In God we trust; all others bring data |
|
|
|
|
|
|
#14 |
|
Member
Iscritto dal: Sep 2008
Città: Milano
Messaggi: 126
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:28.



















