mjk
02-04-2003, 11:12
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::
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::