Farklı davranış türleri arasında geçiş yapmak için geliştirme sırasında #ifdef kullanmak iyi bir uygulama mıdır? Örneğin, var olan kodun davranışını değiştirmek istiyorum, davranışı nasıl değiştireceğime dair birkaç fikrim var ve farklı yaklaşımları test etmek ve karşılaştırmak için farklı uygulamalar arasında geçiş yapmak gerekiyor. Genellikle koddaki değişiklikler karmaşıktır ve farklı dosyalardaki farklı yöntemler üzerinde etkili olur.
Genelde birkaç tanımlayıcı tanıtırım ve böyle bir şey yaparım.
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;
}
Bu, farklı yaklaşımlar arasında hızlıca geçiş yapmanıza ve kaynak kodun yalnızca bir kopyasında her şeyi yapmanıza olanak sağlar. Gelişim için iyi bir yaklaşım mı yoksa daha iyi bir uygulama mı var?
#ifdefblok kapalıyken bloklardaki hiçbir şeyi değerlendirmediğini unutmayın . Tüm yolları düzenli olarak oluşturmazsanız, kodun kolayca eskimeye neden olabileceği ve derleme yapamayacağı durumlar ile karşılaştık.
#ifdefsaz hantal hale getirmek için bazı yollar ortaya koymaktadır .