Sto avviando un nuovo progetto, che prenderà due progetti esistenti, userà parte delle funzionalità di ciascuno e aggiungerà nuove funzionalità.
Come al solito, entrambi i progetti non usano tipi C standard, preferendo typedef
loro.
Tutto il codice è in C, non C ++, quindi ovviamente, entrambi i progetti volevano un tipo booleano, ed entrambi hanno typedef'd Bool
, risultando in un errore del compilatore nel nuovo codice quando include entrambi i file di intestazione (l'esistente i progetti non conoscono nulla l'uno dell'altro e vanno benissimo)
Ovviamente, nessuna squadra vuole cambiare il suo codice (e potenzialmente destabilizzarlo).
E non c'è #if typedef
.
Di seguito viene riportata la descrizione di Bad ascii art:
------------- --------------- -------------
| Project X | | new project | | Project Y |
------------- --------------- -------------
\ / \ /
\ / \ /
---------------- --------------
| X.h | | Y.h |
---------------- --------------
Dove sia x.h che y.h typedef
Bool.
Devo essere in grado di costruire i progetti esistenti X e Y, oltre al nuovo progetto.
Come posso aggirare il problema della doppia definizione nel nuovo progetto (che richiede molte altre cose da x.h e y.h), e comunque essere in grado di costruire i progetti esistenti X e Y?
(Nota: il problema potrebbe essere maggiore di Bool
, ma quello è il primo che emerge, quindi lo uso come esempio. Spero di non trovare due funzioni o enumerazioni con lo stesso nome).
Sto cercando una soluzione che, preferibilmente, non abbia alcun impatto sul codice esistente o abbia un impatto minimo sul codice esistente. Ho un'idea in mente, ma preferirei ascoltare gli altri, preferibilmente qualcuno che ha già fatto prima.