Secondo il mio modesto parere, le opzioni del precompilatore non dovrebbero essere usate nel test di variabili.

La cosa più logica, a mio avviso (non volendo ricorrere alle classi del c++) sarebbe fare una cosa di questo tipo:

codice:
extern "C" int client (...);
extern "C" int server (...);

if (...)
   client ();  /* Funzione contenuta in client.c e dichiarata come
                  extern nel modulo corrente */
else
   server();   /* Funzione contenuta in server.c e dichiarata come
                  extern nel modulo corrente */
Le due funzioni chiamate, client() e server(), sarebbero due funzioni paragonabili alle "main" dei rispettivi moduli di codice (cioè due funzioni madri da cui richiamare tutte le altre funzioni utili).
In questo modo accederesti ai due moduli di codice in modo ragionato e strutturato. Scrivere un'inclusione di un intero modulo di codice è come copiarlo e incollarlo pedissequamente all'interno del codice chiamante, tutto compreso.