Ho una struttura che potrebbe avere altri 2 membri a seconda della variabile del preprocessore.
struct foo {
int m1;
// ... (other members)
#ifdef MORE_MEMBERS
int m2;
int m3;
#endif
}
In alcune parti del codice, ho bisogno di cambiare alcune chiamate di funzione da func(foo.m1) a func(foo.m1, foo.m2, foo.m3) . Gli ultimi due argomenti saranno ignorati se MORE_MEMBERS non è definito, ma ricevo comunque errori di compilazione dalle chiamate di funzione.
Posso pensare a due soluzioni:
(1) Usa un'unione. m2 e m3 saranno solo alias su m1 .
struct foo {
#ifdef MORE_MEMBERS
int m1, m2, m3;
#else
union {
int m1, m2, m3;
}
#endif
// ... (other members)
}
(2) Usa una funzione wrapper, mantenendo la definizione della struttura senza unione.
func2(foo) {
#ifdef MORE_MEMBERS
func(foo.m1, foo.m2, foo.m3);
#else
func(foo.m1);
#endif
}
Cosa sarebbe meglio nel file con le chiamate alle funzioni modificate? Una modifica di func(int) in func(int,int,int) o func(int) in func2(foo) .