Ist es empfehlenswert, #ifdef während der Entwicklung zu verwenden, um zwischen verschiedenen Verhaltenstypen zu wechseln? Zum Beispiel möchte ich das Verhalten von vorhandenem Code ändern, ich habe verschiedene Ideen, wie ich das Verhalten ändern kann, und es ist erforderlich, zwischen verschiedenen Implementierungen zu wechseln, um verschiedene Ansätze zu testen und zu vergleichen. Normalerweise sind Änderungen im Code komplex und wirken sich auf verschiedene Methoden in verschiedenen Dateien aus.
Normalerweise füge ich mehrere Bezeichner ein und mache so etwas
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;
}
Dies ermöglicht es, schnell zwischen verschiedenen Ansätzen zu wechseln und alles in nur einer Kopie des Quellcodes zu erledigen. Ist es ein guter Ansatz für die Entwicklung oder gibt es eine bessere Praxis?
#ifdefBlöcken auswerten, wenn der Block deaktiviert ist. Wir sind auf Fälle gestoßen, in denen Code leicht veralten und nicht kompiliert werden kann, wenn Sie nicht routinemäßig alle Pfade erstellen.
#ifdefsweniger umständlich zu machen .