3-ma'ruza funktsiyalar va sinflardan foydalanish. Funktsiya deklaratsiyasi. Funktsiya chaqiruvi. Funktsiyalar uchun bekor qilish sarlavha fayli. Standart sarlavha fayllari. Standart sinflardan foydalanish. Reja


printf () kabi o'zgaruvchan sonli argumentlarni oladigan C funktsiyalari bilan o'zaro ta'sir qilish uchun kerak bo'ladi


Download 137.72 Kb.
bet4/15
Sana09.03.2023
Hajmi137.72 Kb.
#1255999
1   2   3   4   5   6   7   8   9   ...   15
Bog'liq
Лек 3узб

printf () kabi o'zgaruvchan sonli argumentlarni oladigan C funktsiyalari bilan o'zaro ta'sir qilish uchun kerak bo'ladi .
Prototiplar sizga nima beradi
Prototiplar kompilyatorlarga yordam berishini ko'rdingiz. Lekin nima uchun ular sizga foydali? Prototiplar dasturdagi xatolar ehtimolini sezilarli darajada kamaytiradi. Xususan, ular quyidagilarni ta'minlaydi:

  • Kompilyator qaytariladigan qiymatni to'g'ri boshqaradi.

  • Kompilyator argumentlarning to'g'ri soni ko'rsatilganligini tekshiradi.

  • Kompilyator argumentlarning to'g'ri turlarini tekshiradi. Agar tur mos kelmasa, kompilyator iloji boricha uni to'g'ri turga aylantiradi.

Qaytish qiymatini qanday qilib to'g'ri boshqarish haqida biz allaqachon gaplashdik. Keling, agar siz noto'g'ri dalillarni keltirsangiz nima bo'lishini ko'rib chiqamiz. Masalan, dasturda quyidagi chaqiruv amalga oshirildi deylik:
juft z = kub();
Funktsiyani prototip qilmasdan, kompilyator uni o'tkazib yuboradi. Funktsiya ­chaqirilganda, u kub() raqamni olishi kerakligini aniqlaydi va paydo bo'lgan har qanday qiymatni almashtiradi. ANSI C C++ dan prototip yaratishdan oldin C shunday ishlagan. ANSI C-da prototip yaratish ixtiyoriy bo'lgani uchun, C dasturlari bugungi kunda ham shunday ishlaydi. Lekin C++ da prototiplash majburiydir, shuning uchun sizga bunday xatolikdan kafolat beriladi.
Aytaylik, siz argumentlar ro'yxatini taqdim etdingiz, ammo ulardan ba'zilari ­to'g'ri emas. C da bu halokatli xatolarga olib kelishi mumkin. Misol uchun, agar funktsiya int ni kutsa (aytaylik, bu 16 bit) va siz dublni (aytaylik, 64 bit) o'tkazsangiz, u holda funksiya faqat 64 ning birinchi 16 bitini ko'radi va ularni int qiymati sifatida izohlashga harakat qiladi. Biroq, C++ har ikkala tur ham arifmetik deb hisoblab, uzatilgan qiymatni prototipda ko'rsatilgan turga avtomatik ravishda o'zgartiradi.
Masalan, ro'yxat bitta bayonotda ikkita turdagi nomuvofiqlikni o'z ichiga oladi:
tabriklar (kub (2));
Birinchidan, dastur 2-butun qiymatni kub() funksiyasiga o'tkazadi, bu esa dublni kutadi ­. Kompilyator cube() prototipi double argument turini ko'rsatayotganini payqab, 2 ni 2,0 ga, ya'ni double tipidagi qiymatga aylantiradi. Keyin cube() 8 qiymatini qaytaradi. Cheers() argumenti sifatida foydalaniladigan double turi haqida. Shunga qaramay, kompilyator prototipni tekshiradi va cheers() int argumentini talab qilishini sezadi. U qaytarilgan qiymatni butun songa o'zgartiradi 8. Umuman olganda, prototiplash kutilgan turlarga avtomatik ravishda quyish imkonini beradi. (Biz 8-bobda muhokama qiladigan funktsiyaning haddan tashqari yuklanishi ba'zi bir turdagi avtomatik o'zgarishlarga to'sqinlik qiladigan noaniq vaziyatlarni keltirib chiqarishi mumkin.)
Avtomatik turdagi konvertatsiya qilish barcha mumkin bo'lgan xatolarni bartaraf etmaydi. Misol uchun, agar siz 8 qiymatidan o'tayotgan bo'lsangiz. 33E2 7 int argumentini kutadigan funktsiyaga aylantirilsa, bunday katta qiymatni oddiy int ga to'g'ri aylantirib bo'lmaydi. Ba'zi kompilyatorlar katta turlarni avtomatik ravishda kichik turlarga aylantirishda mumkin bo'lgan ma'lumotlar yo'qolishi haqida ogohlantiradilar .­
ma'noga ega bo'lganda turdagi konversiyalarni amalga oshirishga imkon beradi . ­Misol uchun, butun sonni strukturaga yoki ko'rsatkichga aylantirish mumkin emas.
Prototiplash kompilyatsiya vaqtida sodir bo'ladi va statik yozish deb ataladi . Statik yozish, siz allaqachon ko'rganingizdek, ish vaqtida aniqlash qiyin bo'lgan ko'plab xatolarni aniqlaydi.
Funktsiya argumentlari va qiymat bo'yicha o'tish
Funktsiya argumentlarini batafsil ko'rib chiqish vaqti keldi. C++ odatda ularni qiymat bo'yicha uzatadi. Bu shuni anglatadiki, argumentning raqamli qiymati funktsiyaga uzatiladi, bu erda u yangi o'zgaruvchiga tayinlanadi. Masalan, Listing 7.2 ­da quyidagi funksiya chaqiruvi mavjud:
ikki qavatli hajm = kub (yon);
Bu yerda side - ishga tushirish misolida 5 ga o'rnatilgan o'zgaruvchidir. Cube() funksiyasining sarlavhasi ekanligini eslang:
juft kub (ikkita x)
Bu funktsiya chaqirilganda, u x nomli yangi qo'sh o'zgaruvchini yaratadi va unga 5 qiymatini beradi.Bu bizga main() dagi ma'lumotlarni cube() da sodir bo'layotganidan ajratib olish imkonini beradi, chunki cube() ning nusxasi ustida ishlaydi. asl ma'lumotlar o'rniga tomoni. . Tez orada bunday himoya namunasini ko'rasiz. O'tkazilgan qiymatni olish uchun ishlatiladigan o'zgaruvchiga ­soxta argument yoki soxta parametr deyiladi . Funksiyaga berilgan qiymat haqiqiy argument yoki haqiqiy parametr deb ataladi. Vaziyatni biroz soddalashtirish uchun C++ standarti haqiqiy argument yoki parametrni belgilash uchun argument so‘zidan , rasmiy argument yoki ­parametrni ko‘rsatish uchun parametr so‘zidan foydalanadi. Ushbu terminologiyadan foydalanib, argumentni o'tkazish uning qiymatini parametrga beradi, deb aytishimiz mumkin. ( 7.2- rasmga qarang . )



Download 137.72 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   ...   15




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