C xotira sinflari (storage classes)
C xotira sinflari (storage classes)
Xotira sinflari o‘zgaruvchilarning yashash muddati, ko‘rinuvchanligi va xotiradagi joylashuvini belgilaydi.
C tilida to‘rtta asosiy xotira sinfi spetsifikatori mavjud:
autostaticregisterextern
Ko‘rinish sohasi (scope) va xotira sinflari o‘rtasidagi farq
Ko‘rinish sohasi (scope) o‘zgaruvchidan qayerda foydalanish mumkinligini belgilaydi, xotira sinflari esa u qancha vaqt yashashini va qayerda saqlanishini belgilaydi. Bu bob C ko‘rinish sohasi (scope) bobining davomidir.
auto
auto kalit so‘zi lokal o‘zgaruvchilar uchun ishlatiladi. U funksiyalar ichida e’lon qilingan o‘zgaruvchilar uchun standart holat hisoblanadi, shuning uchun kamdan-kam hollarda aniq yoziladi.
Misol
int main() {
auto int x = 50; // Same as just: int x = 50;
printf("%d\n", x);
return 0;
}
static
static kalit so‘zi o‘zgaruvchi yoki funksiyaning yashash muddati va ko‘rinuvchanligi jihatidan qanday ishlashini o‘zgartiradi:
- Statik lokal o‘zgaruvchilar funksiya chaqiruvlari orasida o‘z qiymatini saqlab qoladi.
- Statik global o‘zgaruvchilar/funksiyalar o‘z faylidan tashqarida ko‘rinmaydi.
Misol
void count() {
static int myNum = 0; // Keeps its value between calls
myNum++;
printf("num = %d\n", myNum);
}
int main() {
count();
count();
count();
return 0;
}
Natija:
num = 1
num = 2
num = 3
Farqni ko‘rish uchun misoldan static kalit so‘zini olib tashlab ko‘ring.
register
register kalit so‘zi o‘zgaruvchini (tezroq murojaat qilish uchun) protsessor registrida saqlashni taklif qiladi.
register o‘zgaruvchisining manzilini & yordamida olib bo‘lmaydi.
Eslatma: register kalit so‘zi deyarli eskirgan - zamonaviy kompilyatorlar registrlarda saqlash uchun eng mos o‘zgaruvchilarni avtomatik tanlaydi, shuning uchun odatda undan foydalanishingiz shart emas.
Misol
int main() {
register int counter = 0;
printf("Counter: %d\n", counter);
return 0;
}
extern
extern kalit so‘zi kompilyatorga o‘zgaruvchi yoki funksiya boshqa faylda aniqlanganini bildiradi.
U odatda bir nechta manba fayllari bilan ishlashda qo‘llaniladi.
1-fayl: main.c
#include <stdio.h>
extern int shared; // Declared here, defined in another file
int main() {
printf("shared = %d\n", shared);
return 0;
}
2-fayl: data.c
int shared = 50; // Definition of the variable
Ikkala faylni birgalikda kompilyatsiya qiling:
gcc main.c data.c -o program
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
