#ifdef vs #etkinleştirilmesi/kod belirli bölümleri derleme devre dışı bırakmak için bir yöntem olarak daha iyi/daha güvenli olan?
Bu tarz meselesi olabilir, ama bizim dev takım içinde bir bölünme biraz var ve eğer bir başkasının bu konuda herhangi bir fikir olup olmadığını merak ettim...
Temelde, biz normal gelişim sırasında devre dışı bırakmak bazı hata ayıklama yazdırma ifadeler var. Şahsen aşağıdaki: yapmayı tercih ederim
\\---- SomeSourceFile.cpp ----
#define DEBUG_ENABLED (0)
...
SomeFunction()
{
int someVariable = 5;
#if(DEBUG_ENABLED)
printf("Debugging: someVariable == %d", someVariable);
#endif
}
Takım şunlardan oluşur rağmen tercih:
\\---- SomeSourceFile.cpp ----
#undef DEBUG_ENABLED
\\#define DEBUG_ENABLED
...
SomeFunction()
{
int someVariable = 5;
#ifdef DEBUG_ENABLED
printf("Debugging: someVariable == %d", someVariable);
#endif
}
...bu yöntem sizin için daha iyi ve neden geliyor? Benim hissettiğim ilk şey her zaman tanımlı olduğundan daha güvenlidir ve diğer başka tanımlar yok edebilirsin tehlike yok.
CEVAP
Benim ilk tepkim#ifdef
, tabii kiama #if
aslında bazı önemli avantajlar bu yüzden burada olduğunu düşünüyorum
İlk olarak, basit DEBUG_ENABLED
kullanabilirsinizvederlenmiş testleri. Örnek - Genellikle, hata ayıklama etkinleştirildiğinde uzun zaman aşımları istiyorum, #if
, ben bu kullanarak yazabilirsiniz
DoSomethingSlowWithTimeout(DEBUG_ENABLED? 5000 : 1000);
... yerine ...
#ifdef DEBUG_MODE
DoSomethingSlowWithTimeout(5000);
#else
DoSomethingSlowWithTimeout(1000);
#endif
İkinci olarak, eğer bir genel sabit #define
bir geçiş yapmak istiyorsanız daha iyi bir durumda değilsin. #define
ler genellikle en C programcıları tarafından kaşlarını çattı.
Ve, Üçüncü, takım içinde bir bölünme söylüyorsun. Benim tahminim bu farklı üyeleri farklı yaklaşımlar var demektir ve standardize etmek gerekir. #if
tercih edilen seçenek olduğunu iktidar kod #ifdef
kullanma ve DEBUG_ENABLED
yanlış olduğunu bile çalışma derlemek anlamına gelir. Veçokdaha kolay izlemek ve tersi daha olmaması gerekirken üretilen hata ayıklama çıktısını kaldırmak için.
Oh, ve küçük okunabilirlik bir nokta. Gerekir için kullanmak doğru/yanlış yerine 0/1 senin #define
ve çünkü değer tek bir sözcük belirteç, bir zaman ihtiyacın yok parantez etrafında.
#define DEBUG_ENABLED true
yerine
#define DEBUG_ENABLED (1)
Nasıl bir yöntem adı ve satır numarası...
Nasıl Java kod bazı bölümleri için Ecl...
Nasıl kaydırma geçici olarak devre dış...
Devre dışı bırakmak için not defteri A...
Nasıl geçici olarak MySQL yabancı anah...