try-except va try-finally — xatolarni boshqarish mavzusi. Muhim haqiqat: standart C tilida try-catch mexanizmi yo’q — u C++ va boshqa tillarga xos. Biroq C’da xatolarni boshqarishning o’z usullari bor: qaytariladigan qiymatlarni tekshirish, errno va Windows’dagi maxsus try-except. Bu darsda C’ga xos yondashuvlarni ko’ramiz.
Xatolarni boshqarish (C’da) — C’da xatolar odatda funksiyaning qaytish qiymati va
errnoglobal o’zgaruvchisi orqali aniqlanadi. Windows’da esa strukturaviy istisnolar (SEH)__try/__exceptbilan ishlaydi.
C’ning asosiy usuli: qiymatni tekshirish
C’da xatoni ushlashning asosiy yo’li — funksiya qaytargan qiymatni tekshirish. Masalan, fopen xato bo’lsa NULL qaytaradi:
#include <stdio.h>
int main(void) {
FILE *fayl = fopen("yoq.txt", "r");
if (fayl == NULL) {
printf("Xato: fayl ochilmadi\n");
return 1;
}
fclose(fayl);
return 0;
}
Xato: fayl ochilmadi
Bu — C’da xato boshqarishning eng keng tarqalgan naqshi: har bir xavfli amaldan keyin natijani tekshirish. Dastur qulamaydi, xatoni oqilona qayta ishlaydi.
errno bilan xato sababini bilish
errno.h kutubxonasi global errno o’zgaruvchisini beradi — u oxirgi xato kodini saqlaydi. perror esa uni matn sifatida chiqaradi:
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main(void) {
FILE *fayl = fopen("yoq.txt", "r");
if (fayl == NULL) {
printf("Xato: %s\n", strerror(errno));
return 1;
}
fclose(fayl);
return 0;
}
Xato: No such file or directory
strerror(errno) xato kodini tushunarli matnga aylantirdi. Bu foydalanuvchiga aniq sabab ko’rsatishda foydali.
Windows: __try va __except
Windows platformasida Microsoft kompilyatori strukturaviy istisnolarni (SEH) qo’llab-quvvatlaydi:
#include <stdio.h>
int main(void) {
__try {
int *ptr = NULL;
*ptr = 10; /* xato: NULL ga yozish */
}
__except(1) {
printf("Istisno ushlandi!\n");
}
return 0;
}
Istisno ushlandi!
__try blokida xavfli kod, __except da esa xatoga javob yoziladi. Diqqat: bu faqat Windows/MSVC’da ishlaydi, standart C’ning qismi emas.
Yondashuvlarni solishtirish
C’dagi xato boshqarish usullarini jadvalda ko’ramiz:
| Usul | Platform | Xususiyati |
|---|---|---|
| Qaytish qiymati | barcha | standart, universal |
errno |
barcha | xato sababini beradi |
__try/__except |
faqat Windows | strukturaviy istisno |
Portativ (barcha tizimda ishlaydigan) kod uchun qaytish qiymati va errno afzal.
Xulosa
Bu bo’limda C’da xato boshqarishni — qaytish qiymatini tekshirish, errno/strerror va Windows’dagi __try/__except — ko’rib chiqdik. Standart C’da try-catch yo’q; xatolar qiymatlar orqali boshqariladi. Keyingi darsda ma’lumotlar bazasi bilan ishlashga o’tamiz.