# include
long r = 100; //global o'zgaruvchi,
//funksiyalar tashqarisida aniqlangan
void staticLocal(); //funksiya prototipi yoki e'loni
void globalAuto(int k /* k funksiya prototipi
sohasiga ega */); //f-ya e'loni
int main ()
{
staticLocal();
staticLocal();
int m = 6;
globalAuto(m);
::r = ::r + 30;
cout "main da global long r: ";
cout << ::r << endl; //global long r to'liq aniqlangan
//ismi o'rqali qo'llanilmoqda
m++;//m = 7
globalAuto(m);
int r = 10; //tashqi sohadagi main ga nisbatan lokal o'zgaruvchi;
//long r ni to'sadi
cout << "tashqi sohadagi lokal r: " << r << endl;
{ //ichki blok
short r = 3; //ichki sohadagi lokal o'zgaruvchi;
//int r ni to'sadi
cout << "ichki sohadagi lokal r: " << r << endl; }
28
cout << "tashqi sohadagi lokal r: " << r << endl;
return (0);
}
void staticLocal() {
static int s = 0; //statik o'zgaruvchi
cout << "staticLocal da: " << s << endl;
s++; //s = 1;
}
void globalAuto(int i) {
int g = 333; //avtomatik o'zgaruvchi
cout << "globalAuto da: " << i << " ";
cout << g << " ";
g++;
cout << r << endl; //global long r ekranga bosiladi
}
Ekranda:
staticLocal da: 0
staticLocal da: 1
globalAuto da: 6 333 100
main da global long r: 130
globalAuto da: 7 333 130
tashqi sohadagi lokal r: 10
ichki sohadagi lokal r: 3
tashqi sohadagi lokal r: 10
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.
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
29
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
Do'stlaringiz bilan baham: |