Является ли хорошей практикой использование #ifdef во время разработки для переключения между различными типами поведения? Например, я хочу изменить поведение существующего кода, у меня есть несколько идей, как изменить поведение, и необходимо переключаться между различными реализациями, чтобы тестировать и сравнивать разные подходы. Обычно изменения в коде сложны и влияют на разные методы в разных файлах.
Я обычно вводю несколько идентификаторов и делаю что-то подобное
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;
}
Это позволяет быстро переключаться между различными подходами и делать все только в одной копии исходного кода. Это хороший подход для развития или есть лучшая практика?
#ifdef
блоках, если блок выключен. Мы столкнулись со случаями, когда код может легко устареть и не скомпилироваться, если вы обычно не строите все пути.
#ifdefs
менее громоздким.