È buona norma utilizzare #ifdef durante lo sviluppo per passare da un tipo di comportamento all'altro? Ad esempio, voglio cambiare il comportamento del codice esistente, ho diverse idee su come cambiare il comportamento ed è necessario passare tra diverse implementazioni per testare e confrontare diversi approcci. Di solito le modifiche al codice sono complesse e influenzano metodi diversi in file diversi.
Di solito introduco diversi identificatori e faccio qualcosa del genere
void foo()
{
doSomething1();
#ifdef APPROACH1
foo_approach1();
#endif
doSomething2();
#ifdef APPROACH2
foo_approach2();
#endif
}
void bar()
{
doSomething3();
#ifndef APPROACH3
doSomething4();
#endif
doSomething5();
#ifdef APPROACH2
bar_approach2();
#endif
}
int main()
{
foo();
bar();
return 0;
}
Ciò consente di passare rapidamente da un approccio all'altro e fare tutto in una sola copia del codice sorgente. È un buon approccio per lo sviluppo o esiste una pratica migliore?
#ifdef
blocchi se il blocco è disattivato. Ci siamo imbattuti in casi in cui il codice può facilmente diventare obsoleto e non compilare se non si creano abitualmente tutti i percorsi.
#ifdefs
meno ingombranti.