SORU
25 EYLÜL 2008, PERŞEMBE


#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
25 EYLÜL 2008, PERŞEMBE


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. #defineler 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)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ben Vivona

    Ben Vivona

    24 Ocak 2010
  • campos9896

    campos9896

    24 Mart 2012
  • colacas

    colacas

    29 EKİM 2006