¿Es una buena práctica usar #ifdef durante el desarrollo para cambiar entre diferentes tipos de comportamiento? Por ejemplo, quiero cambiar el comportamiento del código existente, tengo varias ideas sobre cómo cambiar el comportamiento y es necesario cambiar entre diferentes implementaciones para probar y comparar diferentes enfoques. Por lo general, los cambios en el código son complejos y tienen influencia en diferentes métodos en diferentes archivos.
Normalmente presento varios identificadores y hago algo así
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;
}
Esto permite cambiar rápidamente entre diferentes enfoques y hacer todo en una sola copia del código fuente. ¿Es un buen enfoque para el desarrollo o hay una mejor práctica?
#ifdef
bloques si el bloque está desactivado. Nos encontramos con casos en los que el código puede quedar obsoleto fácilmente y no compilarse si no construye rutinariamente todas las rutas.
#ifdefs
menos engorroso.