Questo modello è utile anche per il rilevamento di funzionalità di registri nei microprocessori, come in this question. Per esempio, ci possono essere due file simili di intestazione, uno dei quali definisce un timer, e quello che definisce 2:
cheapprocessor.h
:
#define TMR1 TMR1
extern volatile int TMR1;
expensiveprocessor.h
:
#define TMR1 TMR1
extern volatile int TMR1;
#define TMR2 TMR2
extern volatile int TMR2;
che significa nella tua codice principale, quando si include un processor.h
generico che delega all'intestazione appropriata per la destinazione, è possibile rilevare funzionalità:
#include <processor.h>
#ifdef TMR2
x = TMR2;
#else
x = 0; // no timer, probably because we're on the cheaper model
#endif
sentitevi liberi di marcare questa domanda come risposta;) – claf