SORU
14 Temmuz 2010, ÇARŞAMBA


Neden #ifndef CLASS_H kullanın ve #CLASS_H gibi davranabilir .h dosyası değil .cpp?

Her zaman insanların yaz gördüm

sınıf.h

#ifndef CLASS_H
#define CLASS_H

//blah blah blah

#endif

Asıl soru, neden onlar da bunu yapma .sınıf fonksiyonları tanımları içeren dosya cpp?

Hadi var diyelimmain.cppvemain.cppvardırsınıf.h.sınıf.hhiçbir şey almayın, nasıl yanimain.cppiçinde ne olduğunuclass.cpp?

CEVAP
14 Temmuz 2010, ÇARŞAMBA


İlk, ilk sorgulama adresi için:

Bu e bakın.hdosya:

#ifndef FILE_H
#define FILE_H

/* ... Declarations etc here ... */

#endif

Bu çeşitli nedenlerle sorunlu olabilir birden çok kez dahil olmak üstbilgi dosyası önlemenin basit bir tekniktir. Proje derlenirken, her.cppdosya (genellikle) derlendi. Basit bir ifadeyle, bu derleyici senin süreceği anlamına gelir.cppdosya, açık dosyaları #included Bu arada hepsini içine büyük bir metin dosyası, ve daha sonra gerçekleştirmek sözdizimi analizi ve nihayet olacak dönüştürmek için bazı Ara kodu, optimize/diğer görevleri gerçekleştirmek, ve son olarak oluşturmak Meclisi çıkış için hedef mimarisi. Eğer bir dosya #included ise, bu nedenle, altında birden çok kez.cppdosya, derleyici eğer bu dosya içinde tanımlar ise, derleyici bir hata değişkeni yeniden söylüyorum çok dosya içeriğini iki kez ekleyin. Dosya derleme işlemi basit adımda tarafından işlendiğinde, içeriğini ilk iki satırı ulaşıldığında ilk kez FILE_H işleyişi için tanımlı olup olmadığını kontrol eder. Eğer değilse, FILE_H tanımlamak ve arasındaki Kodu ve #endif Direktif işleme devam edecektir. Bir dahaki sefere bu dosyanın içeriğini bu kadar basit gördüğünü, FILE_H karşı kontrol edin, yanlış olacak, hemen #endif aşağı tarama ve sonra da devam edecektir. Bu yeniden tanımlamaya hataları önler.

Ve ikinci sorun gidermek için:

Genel bir uygulama olarak C programlamada iki dosya türleri içine gelişimini ayrı. Bir uzantısı.hve bu bir "başlık dosyası." diyoruz Genellikle fonksiyonlar, sınıflar, yapılar, global değişkenler, typedefs, ön makroları ve tanımlamaları, vb beyanında bulunur. Temelde, onlar sadece kod hakkında size bilgi vermek. O zaman var.cppdediğimiz uzantısı "kod dosyası." Bu işlevlerin tanımları, sınıf üyeleri, tanımlar gereken herhangi bir yapı üyeleri, değişkenler, vb küresel sağlayacaktır. Bu yüzden.hdosya Kodu ve beyan eder.cppdosya beyanname uygular. Bu nedenle, biz genellikle derleme sırasında her bir derleme.cppbir nesne dosyası ve sonra da bu nesnelere (neredeyse hiç göremezsin çünkü . link ^strong>.cppbaşka bir dosya vardır.cppdosya).

Bunlar dışındakiler nasıl çözüldüğünü linker işi. Derleyici işlermain.cppkod için bildirimleri alırclass.cppdahilsınıf.h. Sadece bu işlevleri veya değişkenler gibi bir deklarasyon veren () bak ne olduğunu bilmek gerekir. Senin derlermain.cppdosya (bu ara . bazı nesne dosyası ^strong>ana.n). Aynı şekildeclass.cppbir derlenmişsınıf.ndosya. Son yürütülebilir üretmek için, bir linker bu iki nesne dosyaları birbirine bağlamak için çağrılır. Herhangi bir çözülmemiş bir dış değişkenler veya fonksiyonlar için, derleyici erişim olduğu yerde bir saplama yerleştirin. Linker olacak o zaman bu saplama ve bakmak için kod veya değişken olarak listelenen başka bir nesne dosyası, ve eğer o bulundu, birleştirir koddan iki nesne dosyaları içine bir dosya çıktı ve yerine saplama ile son konumu işlev veya değişken. Bu şekilde, main.cpp senin kodu arama işlevleri ve değişkenleri kullanabilirclass.cppEĞER İLAN VARSA VE SADECEsınıf.h.

Umarım yardımcı olmuşuzdur.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BDGcustoms

    BDGcustoms

    24 NİSAN 2011
  • Jeremy Gallman

    Jeremy Gallm

    11 NİSAN 2012
  • Valdorsha

    Valdorsha

    8 Mayıs 2006