Sarlavha fayllari



Download 14,56 Kb.
Sana31.12.2021
Hajmi14,56 Kb.
#257880
Bog'liq
sarlavha fayllari


Sarlavha fayllari

Dasturlarning hajmi kattalashgan sari barcha kodlar bir nechta fayllarga sig'inmaydi va biz foydalanmoqchi bo'lgan, lekin har safar boshqa fayllarda bo'lgan funktsiyalar uchun dastlabki deklaratsiyalar yozish tobora zerikarli va zerikarli bo'lib qoladi. Barcha reklama e'lonlari bitta joyda bo'lsa yaxshi bo'lardi, to'g'rimi?

.Cpp fayllari loyihalardagi yagona fayllar emas. .H kengaytmasiga ega bo'lgan yana bitta fayl turi - sarlavha fayllari (yoki "sarlavhalar") mavjud. Sarlavha fayllarining maqsadi keyinchalik boshqa dasturlarda foydalanish uchun ob'ektlar deklaratsiyalari to'plamini qulay saqlashdir.

Mundarija:

C ++ standart kutubxonasidan sarlavha fayllari

O'zingizning sarlavha fayllaringizni yozing

Burchak qavslari (& LT; & GT;) va boshqalar. Ikki tirnoq ("")

Nega iostream .h tugamaydi?

Ta'riflarni sarlavha fayllariga yozish mumkinmi?

Maslahat


C ++ standart kutubxonasidan sarlavha fayllari

Quyidagi dasturni ko'rib chiqing:

bitta


2018-04-01 121 2

3

to'rt



besh

6

7



#include & LT; iostream & GT;

int main ()

{

std :: cout & LT; & LT; & QUOT; Salom, dunyo! & QUOT; & LT; & LT; std :: endl;



qaytish 0;

}

Dasturni bajarish natijasi:



Salom Dunyo!

Ushbu dasturda biz cout-dan foydalanamiz, uni biz hech qaerda belgilamaymiz. Qanday qilib kompilyator bu nima ekanligini biladi? Gap shundaki, cout iostream sarlavha faylida e'lon qilinadi. & LT; iostream & GT; ni kiritganimizda, biz iostream sarlavha faylining barcha tarkibini bizning faylimizga nusxalashni so'raymiz. Bu iostream kutubxonasining barcha tarkibini ishlatishga imkon beradi.

Odatda, faqat deklaratsiyalar sarlavha fayllarida ta'riflarsiz yoziladi. Shuning uchun, agar cout faqat iostream sarlavha faylida e'lon qilingan bo'lsa, unda u qaerda aniqlanadi? Javob: bog'lanish bosqichida sizning loyihangiz bilan avtomatik ravishda bog'langan C ++ standart kutubxonasida.

Iostream sarlavha fayli yo'qligining oqibatlarini ko'rib chiqing. Cout-dan har safar foydalanganingizda, cout-ga tegishli barcha deklaratsiyalarni faylning yuqori qismiga qo'lda nusxalashingiz kerak bo'ladi! Siz shunchaki #include & LT; iostream & GT; ni qo'shishingiz yaxshi, shunday emasmi?



O'zingizning sarlavha fayllaringizni yozing

Endi avvalgi darsda muhokama qilgan misolimizga qaytsak. Bizda ikkita fayl bor edi: add.cpp va main.cpp.

add.cpp:

bitta



2018-04-01 121 2

3

to'rt



int qo'shimchasi (int x, int y)

{

return x + y;



}

main.cpp:

bitta


2018-04-01 121 2

3

to'rt



besh

6

7



sakkiz

to'qqiz


#include & LT; iostream & GT;

int qo'shimchasi (int x, int y); // funktsiya prototipidan foydalangan holda dastlabki deklaratsiya

int main ()

{

std :: cout & LT; & LT; & QUOT; 3 va 4 ning yig'indisi & QUOT; & LT; & LT; qo'shish (3, 4) & LT; & LT; std :: endl;



qaytish 0;

}

Izoh: Agar siz barcha fayllarni qayta tiklayotgan bo'lsangiz, u kompilyatsiya tarkibiga qo'shilishi uchun add.cpp-ni qo'shishni unutmang.



Add () nimaligini kompilyatorga aytib berish uchun oldinga deklaratsiyadan foydalandik. Yuqorida aytib o'tganimizdek, har bir faylda ishlatiladigan funktsiyalarning dastlabki deklaratsiyasini yozish juda hayajonli emas.

Va bu erda sarlavha fayllari bizning yordamimizga keladi. Faqat bitta sarlavha faylini yozish kifoya va uni istalgan sonli dasturlarda qayta ishlatish mumkin. Shuningdek, bunday kodga o'zgartirish kiritish (masalan, boshqa parametrni qo'shish) ishlatilgan funktsiyalarni qidirishda barcha fayllarni qidirishdan ancha osonroq.

O'zingizning sarlavha faylingizni yozish unchalik qiyin emas. Sarlavha fayllari ikki qismdan iborat:

Preprocessor ko'rsatmalari - xususan, sarlavha himoyachilari, bu sarlavha faylini bir xil fayldan bir necha marta chaqirilishiga yo'l qo'ymaydi (bu haqda keyingi darsda batafsil).

Sarlavha faylining mazmuni deklaratsiyalar to'plamidir.

Barcha sarlavha fayllaringiz (o'zingiz yozgan) .h kengaytmasiga ega bo'lishi kerak.

add.h:



bitta



2018-04-01 121 2

3

to'rt



besh

6

7



sakkiz

to'qqiz


// Dastlabki protsessor ko'rsatmalaridan boshlaymiz. ADD_H - bu o'zboshimchalik bilan noyob nom (odatda nom fayl nomi ishlatiladi)

#ifndef ADD_H

# ADD_H ni aniqlang

// Va bu sarlavha faylining mazmuni

int qo'shimchasi (int x, int y); // add () funktsiyasining prototipi (oxirida vergulni unutmang!)

// Dastlabki protsessor ko'rsatmasi bilan yakunlang

#endif

Ushbu faylni main.cpp-da ishlatish uchun avval uni o'zingizning loyihangiz bilan bog'lashingiz kerak bo'ladi.



main.cpp, unga add.h qo'shamiz:

bitta



2018-04-01 121 2

3

to'rt



besh

6

7



sakkiz

#include & LT; iostream & GT;

#include & QUOT; add.h & QUOT;

int main ()

{

std :: cout & LT; & LT; & QUOT; 3 va 4 ning yig'indisi & QUOT; & LT; & LT; qo'shish (3, 4) & LT; & LT; std :: endl;



qaytish 0;

}

add.cpp o'zgarishsiz qoladi:



bitta


2018-04-01 121 2

3

to'rt



int qo'shimchasi (int x, int y)

{

return x + y;



}

Tuzuvchi #include & QUOT; add.h & QUOT; bilan uchrashganda, add.h tarkibidagi barcha fayllarni joriy faylga ko'chiradi. Shunday qilib, biz add () funktsiyasining dastlabki deklaratsiyasini olamiz.

Izoh: Sarlavha faylini qo'shsangiz, uning barcha tarkibi #include ... qatoridan so'ng darhol kiritiladi.

Agar kompilyatordan add.h topilmadi, degan xato bo'lsa, fayl nomingiz to'liq "add.h" ekanligiga ishonch hosil qiling. Ehtimol siz matn terish xatosini tuzgan bo'lishingiz mumkin, masalan "qo'shish" (".h" holda) yoki "add.h.txt" yoki "add.hpp".

Agar siz bog'lovchidan add () funktsiyasi aniqlanmaganligi to'g'risida xatolik yuz bersa, unda add.cpp-ni loyihangizga to'g'ri ulaganingizga ishonch hosil qiling (va kompilyatsiya uchun ham)!

Burchak qavslari (& LT; & GT;) va boshqalar. Ikki tirnoq ("")

Ehtimol, nima uchun burchakli qavslar iostream va add.h uchun ikkita tirnoq uchun ishlatilishini bilmoqchisiz. Haqiqat shundaki, burchakli qavslardan foydalanib, biz kompilyatorga aytilgan fayl nomini biz yozmaganligini aytamiz (bu "tizim", ya'ni C ++ standart kutubxonasi tomonidan taqdim etilgan), shuning uchun siz ushbu sarlavhani qidirishingiz kerak tizim katalogidagi fayl ... Ikkita tirnoq kompilyatorga biz o'zimiz yozgan o'z nomimiz faylini qo'shayotganimizni aytadi, shuning uchun uni loyihamizning joriy katalogidan qidirishimiz kerak. Agar fayl u erda bo'lmasa, kompilyator boshqa yo'llarni, shu jumladan tizim kataloglarini tekshirishni boshlaydi.

Qoida: "tizim" sarlavhali fayllarni va sarlavha fayllaringiz uchun ikkita tirnoqni qo'shish uchun burchakli qavslardan foydalaning.

Shuni ta'kidlash kerakki, ba'zi bir sarlavha fayllari boshqa sarlavha fayllarini o'z ichiga olishi mumkin. Biroq, bu tavsiya etilmaydi.

Nega iostream .h tugamaydi?

Yana bir tez-tez so'raladigan yana bir savol: "Nima uchun iostream (yoki boshqa standart sarlavha fayllari)" .h "tugamasdan yozilganda ulanishda?". Gap shundaki, ikkita alohida fayl mavjud: iostream.h (sarlavha fayli) va shunchaki iostream! Tushuntirish uchun qisqacha tarix kerak bo'ladi.

C ++ birinchi marta yaratilganida, Runtime kutubxonasining barcha fayllari .h tugashiga ega edi. Cout va cinning asl nusxalari iostream.h da e'lon qilingan. ANSI qo'mitasi tomonidan C ++ standartlashtirilganda, ular foydalanuvchi identifikatorlari bilan nomlarning ziddiyatli bo'lishini oldini olish uchun barcha funktsiyalarni Runtime kutubxonasidan std nom maydoniga o'tkazishga qaror qilishdi (bu, darvoqe, yaxshi fikr). Biroq, muammo yuzaga keldi: agar barcha funktsiyalar std nom maydoniga o'tkazilsa, u holda eski dasturlar ishlamay qoladi!

Orqaga moslikni ta'minlash uchun bir xil nomdagi, ammo ".h" tugamagan holda sarlavha fayllarining yangi to'plami taqdim etildi. Ularning barcha funktsiyalari std nom maydonida. Shunday qilib, #include & LT; iostream.h & GT; qayta yozishga hojat yo'q edi va yangi dasturlar allaqachon #include & LT; iostream & GT; dan foydalanishi mumkin edi.

Sarlavha faylini C ++ standart kutubxonasidan qo'shganingizda .h bo'lmagan versiyadan foydalanganingizga ishonch hosil qiling (agar mavjud bo'lsa). Aks holda, siz sarlavha faylining endi qo'llab-quvvatlanmaydigan eskirgan versiyasidan foydalanasiz.

Bundan tashqari, C ++ da ishlatilayotgan C-meros qilib qo'yilgan ko'plab kutubxonalar, shuningdek, qo'shilgan c prefiksi bilan takrorlangan (masalan, stdlib.h cstdlib bo'ldi). Ushbu kutubxonalarning faoliyati, shuningdek, foydalanuvchi identifikatorlari bilan nomlarning ziddiyatli bo'lishiga yo'l qo'ymaslik uchun std nom maydoniga o'tkazildi.

Qoida: C ++ standart kutubxonasidan sarlavha fayllarini qo'shishda ".h" holda (agar mavjud bo'lsa) versiyadan foydalaning. Maxsus sarlavha fayllari ".h" bilan tugashi kerak.

Ta'riflarni sarlavha fayllariga yozish mumkinmi?

Agar buni qilsangiz C ++ shikoyat qilmaydi, lekin buni qilish odatiy hol emas.

Yuqorida ta'kidlab o'tilganidek, sarlavha faylini ulashda uning barcha tarkibi #include qatoridan keyin darhol kiritiladi. Bu shuni anglatadiki, sarlavha faylidagi barcha ta'riflar sizning faylingizga ko'chiriladi.

Kichik loyihalar uchun bu muammo bo'lmaydi. Ammo kattaroqlari uchun bu kompilyatsiya vaqtini (chunki kod qayta kompilyatsiya qilinadi) va bajariladigan hajmini oshirishi mumkin. Agar .cpp faylidagi ta'riflarga o'zgartirish kiritadigan bo'lsangiz, faqat o'sha faylni qayta kompilyatsiya qilish kerak bo'ladi. Agar sarlavha faylida yozilgan ta'riflarga o'zgartirish kiritadigan bo'lsangiz, ushbu sarlavhani o'z ichiga olgan har bir faylni #include preprocessor direktivasi yordamida qayta kompilyatsiya qilishingiz kerak bo'ladi. Va bitta kichik o'zgarish sizni butun loyihani qayta kompilyatsiya qilishga majbur qilish ehtimoli keskin ortadi!

Ba'zan o'zgarishi mumkin bo'lmagan oddiy funktsiyalar uchun istisnolar mavjud (masalan, ta'rif faqat bitta satr bo'lgan joyda).

Maslahat


O'zingizning sarlavha fayllaringizni yozish bo'yicha ba'zi maslahatlar:

Har doim preprocessor ko'rsatmalaridan foydalaning.

Sarlavha fayllaridagi o'zgaruvchilarni belgilamang, agar ular doimiy bo'lsa. Sarlavha fayllari faqat deklaratsiyalar uchun ishlatilishi kerak.

Sarlavha fayllaridagi funktsiyalarni aniqlamang.

Har bir sarlavha fayli o'z ishini bajarishi va iloji boricha mustaqil bo'lishi kerak. Masalan, A.cpp bilan bog'liq barcha e'lonlarni A.h faylga, B.cpp bilan bog'liq barcha e'lonlarni B.h faylga qo'yishingiz mumkin. Shunday qilib, agar siz faqat A.cpp bilan ishlasangiz, unda siz faqat A.h ni ulashingiz kerak va aksincha.

Ishlayotgan fayllaringiz nomlarini sarlavha fayllari nomlari sifatida foydalaning (masalan, grade.h classes.cpp bilan ishlaydi).



Boshqa sarlavha fayllaridan ba'zi sarlavha fayllarini qo'shmang.

#Include preprocessor direktivasi yordamida .cpp fayllarini qo'shmang.
Download 14,56 Kb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish