É uma boa prática usar o #ifdef durante o desenvolvimento para alternar entre diferentes tipos de comportamento? Por exemplo, eu quero mudar o comportamento do código existente, tenho várias idéias de como mudar o comportamento e é necessário alternar entre diferentes implementações para testar e comparar diferentes abordagens. Normalmente, as alterações no código são complexas e influenciam métodos diferentes em arquivos diferentes.
Eu costumo introduzir vários identificadores e fazer algo assim
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;
}
Isso permite alternar entre diferentes abordagens rapidamente e fazer tudo em apenas uma cópia do código-fonte. É uma boa abordagem para o desenvolvimento ou existe uma prática melhor?
#ifdef
blocos se o bloco estiver desativado. Encontramos casos em que o código pode facilmente ficar obsoleto e não compilar se você não criar rotineiramente todos os caminhos.
#ifdefs
menos complicado.