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)   .