39 – DARS. ARGUMENT OLMAYDIGAN FUNKSIYALAR.
Agar funksiya prototipida () qavslar ichiga void deb yozilsa, yoki hech narsa
yozilmasa, ushbu funksiya kirish argument olmaydi. Bu qonun C++ da o'rinlidir.
Lekin C da bo'sh argument belgisi, yani () qavslar boshqa ma'no beradi.
Bu e'lon funksiya istalgancha argument olishi mumkin deganidir. Shu sababli
C da yozilgan eski dasturlar C++ kompilyatorlarida hato berishlari mumkindir.
Bundan tashqari funksiya prototipi ahamiyati haqida yozib o'taylik. Iloji
boricha har doim funksiya prototiplarini berib o'tish kerak, bu modulli
dasturlashning asosidir. Prototip va e'lonlar alohida e'lon fayllar ichida
berilishi mumkin. Funksiya yoki klas o'zgartirilganda e'lon fayllari
o'zgarishsiz qoladi. Faqat funksiya aniqlangan fayllar ichiga o'zgartirishlar
kiritiladi. Bu esa juda qulaydir.
40 – DARS. INLINE SIFATLI FUNKSIYALAR.
Funksiyalar dastur yozishda katta qulayliklar beradilar. Lekin mashina saviyasida funksiyani har gal chaqirtirish qo'shimcha ish bajarilishiga olib keladi. Registrlardagi o'zgaruvchilar o'zgartiriladi, lokal yozgaruvchilar quriladi, parametr sifatida berilgan argumentlar funksiya stekiga o'ziladi.Bu, albatta, qo'shimcha vaqt oladi. Umuman aytganda, hech funksiyasiz yozilgan dastur, yani hamma amallari faqat main() funksiyasi ichida bajariladigan monolit programma, bir necha funksiyalarga ega, ayni ishni bajaradigan dasturdan tezroq ishlaydi. Funksiyalarning bu noqulayligini tuzatish uchun inline (satr ichida) ifodasi funksiya e'loni bilan birga qo'llaniladi. inline sifatli funksiyalar tanasi dasturdagi ushbu funksiya chaqirig'I uchragan joyga qo'yiladi. inline deb ayniqsa kichik funksiyalarni belgilash effektivdir. inline ning o'ziga yarasha kamchiligi ham bor, inline qo'llanilganda dastur hajmi oshdi. Agar funksiya katta bo'lsa va dastur ichida ko'p marotaba chaqirilsa, programma hajmi juda kattalashib ketishi mumkin. Oddiy, inline sifati qo'llanilmagan funksiyalar chaqirilish mehanizmi quyidagicha bo'ladi. Dastur kodining ma'lum bir yerida funksiya tanasi bir marotaba aniqlangan bo'ladi. Funksiya chaqirig'i uchragan yerda funksiya joylashgan yerga ko'rsatkich qo'yiladi. Demak, funksiya chaqirig'ida dastur funksiyaga sakrashni bajaradi. Funksiya o'z ishini bajarib bo'lgandan keyin dastur ishlashi yana sakrash joyiga qaytadi. Bu dastur hajmini ihchamlikda saqlaydi, lekin funksiya chaqiriqlari vaqt oladi. Kompilyator inline ifodasini inobatga olmasligi mumkin, yani funksiya oddiy holda kompilyatsiya qilinishi mumkin. Va ko'pincha shunday bo'ladi ham. Amalda faqat juda kichik funksiyalar inline deya kompilyatsiya qilinadi.
inline sifatli funksiyalarga o'zgartirishlar kiritilganda ularni ishlatgan boshqa dastur bloklari ham qaytadan kompilyatsiya qilinishi kerak. Agar katta proyektlar ustida ish bajarilayatgan bo'lsa, bu ko'p vaqt olishi mumkin. inline funksiyalar C da qo'llanilgan # define makrolari o'rnida qo'llanilish uchun mo'ljallangan. Makrolar emas, balki inline funksiyalar qo'llanilishi dastur yozilishini tartibga soladi. Makro funksiyalarni keyinroq o'tamiz.
//inline ifodasining qo'llanilishi
# include
inline int sum(int a, int b);//funksiya prototipi
int main() {
int j = -356,
i = 490;
cout << "j + i = " << sum(j,i) <return (0);
}
int sum(int a, int b){ //funksiya aniqlanishi
return( a + b );
}
Ekranda:
j + i = 134
|