開発中に#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;
}
これにより、さまざまなアプローチをすばやく切り替えて、ソースコードの1つのコピーだけですべてを実行できます。開発のための良いアプローチですか、それともより良いプラクティスがありますか?
#ifdef
、ブロックがオフになっている場合、ブロック内で何も評価しないことに注意してください。すべてのパスを定期的に構築しないと、コードが簡単に古くなってコンパイルできなくなる場合がありました。
#ifdefs
面倒を少なくするいくつかの方法を示します。