|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Mar 2002
Messaggi: 153
|
[C] Numero variabile di argomenti
Ciao a tutti, ho un problema di "eleganza formale" in C (non C++, badate bene). Devo scrivere una sorta di API, e ho tre funzioni praticamente uguali a meno del numero di parametri che devono prendere:
void f1(double x); void f2(double x, unsigned y); void f3(double x, unsigned y, double z); f1 non è che f2 con y = 0, e f2 è f3 con z qualsiasi. Voglio "consensarle" in un'unica funzione per semplificare la vita a chi dovrà usare queste funzioni. In C++ penso che avrei potuto usare: void f(double x, unsigned y = 0, double z = 0.0); In C ho fatto: #include <stdarg.h> void f(double x, ...) { va_start(ap, x); y = va_arg(ap, unsigned); z = va_arg(ap,double); va_end(ap); etc... } Il problema è che se la chiamo con (a è un double) f(a); y e z assumono un valore qualsiasi! Io voglio accorgermi se y non è stato passato e in tale caso porre y = 0. P.S.: soluzione indesiderata il passaggio, come primo argomento, del numero di argomenti che si passano: in tale caso tanto vale usare tre funzioni diverse f1,f2,f3. Scusate per il post lungo e per la domanda assurda. Ciao e grazie, ::mjk:: |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sinceramente non l'ho mai usate, ma credo che basti controllare se ap == NULL...
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Mar 2002
Messaggi: 153
|
Grazie del consiglio, ho provato ma non funziona. Dopo aver dichiarato, con va_start, qual'è l'ultimo argomento "certo", ap punta alla locazione di memoria immediatamente successiva, non curandosi se in essa sono scritti o meno gli argomenti opzionali. Mi sa che non c'è alcun metodo per effettuare l'operazione che voglio io...
|
|
|
|
|
|
#4 | |
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
Re: [C] Numero variabile di argomenti
Quote:
Secondo me se ti interessa solo l'eleganza , e' meglio se ti tieni le tre funzioni separate. Risultera' anche piu' semplice l'utilizzo da parte dell'utente visto che gli eviterai errori subdoli (ad esempio se chiami la funzione con secondo e terzo parametro scambiati il compilatore non se ne accorge) |
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Mar 2002
Messaggi: 153
|
Mi sa che hai proprio ragione... grazie mille a tutti!
bye, ::mjk:: |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:50.



















