Lokal va global o'zgaruvchilar
Deyarli har bir dasturlash tilida lokal o'zgaruvchi tushunchasi mavjud. Ikki funktsiya o'z ma'lumotlarini hisobga olgan holda, go'yo ular bir-biriga aralashmaydi.
Bu avvalgi misolda aniq bir omil (4.2-misol). Asosiy va asosiy ikkalasida mahalliy o'zgarmaydiganlar mavjud. Agar men mahalliy bo'lmaganimda, ya'ni funktsiyalar o'rtasida bo'lishgan bo'lsam - nima bo'lishi mumkinligini o'ylab ko'ring.
Birinchidan, asosiy funktsiya if holatini baholashning bir qismi sifatida asosiy vazifasini bajaradi . Aytaylik, men 24 qiymatiga egaman.
if (prime(i))
cout << i << " is prime" << endl;
else
cout << i << " is not prime" << endl;
// Assume i is not declared here, but is global.
int prime(int n) {
for (i = 2; i <= sqrt((double) n); i++)
if (n % i == 0)
return false;
return true; // If no divisor found, n is
prime.
}
Ushbu funktsiya nimani bajarishini ko'rib chiqing. U i ni 2 ga o'rnatadi va keyin uni o'tgan songa bo'linish uchun tekshiradi, 24. Ushbu test o'tadi, chunki 2 teng ravishda 24 ga bo'linadi va funktsiya qaytadi. Ammo men endi 24 o'rniga 2 ga tengman.
Qaytgandan so'ng, dastur bajariladi
cout << i << " is not prime" << endl;;
quyidagilarni bosib chiqaradi:
2 is not prime
Bu biz xohlagan narsa emas, chunki biz 24 raqamini sinab ko'rdik!
Shunday qilib, ushbu muammoga duch kelmaslik uchun, o'zgaruvchini mahalliy deb e'lon qiling, agar buni amalga oshirish uchun yaxshi sabab bo'lmasa. Agar 2.3-misolga nazar tashlasangiz, men mahalliy ekanligini ko'rasiz; asosiy va asosiy har biri o'zlarining i versiyasini e'lon qiladi.
O'zgaruvchini mahalliy qilmaslik uchun yaxshi sabab bormi? Ha, garchi sizning tanlovingiz bo'lsa, mahalliyroq borganingiz ma'qul, chunki siz bir-biringizga imkon qadar kam xalaqit beradigan funktsiyalarni xohlaysiz.
Global, ya'ni mahalliy bo'lmagan o'zgaruvchilarni har qanday funktsiya ta'rifidan tashqarida e'lon qilish orqali e'lon qilishingiz mumkin. Odatda barcha global deklaratsiyalarni dasturning boshlanishiga, birinchi funktsiyadan oldinroq qo'yish yaxshidir. O'zgaruvchi faqat e'lon qilingan joydan fayl oxirigacha tan olinadi.
Masalan, status deb nomlangan global o'zgarishni e'lon qilishingiz mumkin:
#include
#include
using namespace std;
int status = 0;
void main () {
//
}
Endi nomlangan o'zgaruvchiga har qanday funktsiya kirishi mumkin. Ushbu o'zgaruvchi global bo'lganligi sababli, uning faqat bitta nusxasi mavjud; agar bitta funktsiya holat qiymatini o'zgartirsa, bu boshqa funktsiyalar ko'rgan holat qiymatini aks ettiradi.
Do'stlaringiz bilan baham: |