Sobes.tech
Junior

Niyə başlıq faylında kod yazmırıq?

sobes.tech Süni İntellekt

AI-dan cavab

Başlıq fayllarında (.h və ya .hpp C++-də) kod yerləşdirilməməlidir və bunun səbəbləri aşağıdakılardır:

  1. Bir Təyin Etmə Qaydasının (One Definition Rule - ODR) pozulması. Bir neçə .cpp faylı başlıq faylını daxil etdikdə, içindəki icra edilə bilən kod bir neçə dəfə təyin olunacaq və bu, əlaqələndirmə xətasına (multiple definition) səbəb olacaq. İstisna, inline funksiyalar və sinif/funksiyalar şablonlarıdır; bunlar hər tərcümə modulunda təyin olunmalıdır.

    // nümunə.h
    int g_counter = 0; // Qlobal dəyişən - ODR pozuntusu
    
    void my_function() { // Funksiya - ODR pozuntusu
        // kod
    }
    
    inline void my_inline_function() { // inline funksiya - istisna
        // kod
    }
    
    template<typename T>
    void process(T value) { // şablon funksiya - istisna
        // kod
    }
    
  2. Tərcümə vaxtının artması. Hər dəfə başlıq faylı daxil edildikdə, kompilyator onu yenidən emal edir. Kodun başlıq fayllarına yerləşdirilməsi, kompilyator üçün yükü artırır və layihənin qurulma prosesini yavaşladır, xüsusən böyük layihələrdə.

  3. Dəstək və testlərin mürəkkəbliyi. Başlıq fayllarında yayılmış kod daha az modul olur. Bu, tək-tək komponentlərin test edilməsini və müstəqil dəyişdirilməsini çətinləşdirir.

  4. Daxil etmə döngüsü (include loops) riskləri. Yanlış təşkil olunmuş daxil etmələr, başlıq fayllarında kod ilə, döngüsel asılılıqlara və tərtib problemlərinə səbəb ola bilər.

Başlıq fayllarında ümumiyyətlə aşağıdakılar elan edilir:

  • Siniflər (təriflər, amma metodların tətbiqləri deyil)
  • Funksiyalar (prototiplər)
  • Qlobal dəyişənlər (extern istifadə edilərək)
  • Daimilər
  • Sinif və funksiyalar şablonları (tam təriflər)
  • inline funksiyalar (tam təriflər)
  • Məlumat tipləri (struct, enum, typedef, using)
  • Ad məkanları (namespace)

Kodun tətbiqi (funksiya bədənləri, statik üzvlərin və qlobal dəyişənlərin tərifləri) müvafiq tətbiq fayllarına (.cpp) yerləşdirilir.