Xotira sinflari (storage classes) — o’zgaruvchining xotirada qancha yashashini, qayerdan ko’rinishini va qanday saqlanishini belgilaydigan xususiyatlar. C to’rt xotira sinfini beradi: auto, static, extern va register. Ularni tushunish o’zgaruvchilarning “hayot davri” va ko’rinish sohasini boshqarishda muhim.
Xotira sinfi — o’zgaruvchining amal qilish muddati (lifetime), ko’rinish sohasi (scope) va saqlanish joyini belgilaydigan xususiyat. C’da
auto,static,extern,registermavjud.
To’rt xotira sinfi
C’ning xotira sinflarini jadvalda ko’ramiz:
| Sinf | Amal muddati | Ko’rinishi |
|---|---|---|
auto |
blok davomida | mahalliy (standart) |
static |
butun dastur davomida | mahalliy, saqlanadi |
extern |
butun dastur davomida | global |
register |
blok davomida | mahalliy (tez) |
auto — standart mahalliy
auto — standart xotira sinfi. Mahalliy o’zgaruvchilar shundaydir: ular blok tugashi bilan yo’qoladi:
#include <stdio.h>
int main(void) {
int son = 10; /* aslida bu auto int son */
printf("%d\n", son);
return 0;
}
10
auto kalit so’zini yozish shart emas — mahalliy o’zgaruvchilar avtomatik shunday. son faqat main bloki ichida yashaydi.
static — qiymatni saqlaydigan
static mahalliy o’zgaruvchi qiymatini funksiya chaqiruvlari orasida saqlab qoladi:
#include <stdio.h>
void hisobla(void) {
static int son = 0; /* qiymat saqlanadi */
son++;
printf("Chaqiruv: %d\n", son);
}
int main(void) {
hisobla();
hisobla();
hisobla();
return 0;
}
Chaqiruv: 1
Chaqiruv: 2
Chaqiruv: 3
Diqqat: static int son har chaqiruvda qayta nolga tushmadi — qiymat saqlanib bordi. Oddiy mahalliy o’zgaruvchi bo’lsa, har safar 1 chiqardi. Bu static ning muhim xususiyati.
extern va register
extern o’zgaruvchini bir necha faylda birgalikda ishlatishga imkon beradi — u global o’zgaruvchiga boshqa fayldan murojaat qilishni bildiradi. register esa o’zgaruvchini iloji bo’lsa protsessor registrida saqlab, tezlashtirishni so’raydi (zamonaviy kompilyatorlar buni o’zi optimallashtiradi). Bu ikkovi maxsus vaziyatlarda ishlatiladi.
Xulosa
Bu bo’limda xotira sinflarini — auto, static, extern, register — va ayniqsa static ning qiymat saqlash xususiyatini ko’rib chiqdik. Xotira sinflari o’zgaruvchining hayot davrini boshqaradi. Keyingi darsda xotira bilan ishlovchi funksiyalarga (dinamik xotira) o’tamiz.