16. Preprocessor va #define¶
C dasturini yozganda ba'zi buyruqlar main() funksiyasidan oldin yoziladi.
Masalan:
#include <stdio.h>
Bunday buyruqlarni C tilining preprocessor buyruqlari deb ataymiz.
Hozircha preprocessorning barcha imkoniyatlarini o‘rganmaymiz. Eng kerakli qismlarini sodda misollar bilan ko‘ramiz.
#include nima?¶
Oldingi dasturlarimizda ko‘p marta:
#include <stdio.h>
yozdik.
#include boshqa kutubxonadagi kerakli kodlarni dasturimizga qo‘shishga yordam beradi.
Masalan:
#include <stdio.h>
bizga quyidagi funksiyalardan foydalanish imkonini beradi:
printf()
scanf()
Shuning uchun:
printf()
ishlatishdan oldin odatda:
#include <stdio.h>
yozamiz.
Kutubxona nima?¶
Keling, kutubxonani oddiy tasavvur qilamiz.
Tasavvur qiling, sizda katta asboblar qutisi bor.
Unda:
bolg‘a
otvyortka
kalit
arra
bor.
Sizga faqat kerakli asbobni olasiz.
C tilidagi kutubxonalar ham tayyor funksiyalar to‘plamiga o‘xshaydi.
Masalan:
stdio.h
kiritish va chiqarish funksiyalarini beradi.
stdio.h¶
Eng ko‘p ishlatadigan kutubxonalarimizdan biri:
#include <stdio.h>
Bu kutubxona quyidagi funksiyalarni o‘z ichiga oladi:
printf()
scanf()
fopen()
fclose()
va boshqa funksiyalar.
string.h¶
Satrlar bilan ishlash uchun:
#include <string.h>
ishlatamiz.
Masalan:
strlen()
strcpy()
strcat()
strcmp()
funksiyalari shu kutubxonada mavjud.
stdlib.h¶
Ba'zi umumiy funksiyalar uchun:
#include <stdlib.h>
ishlatiladi.
Masalan:
malloc()
free()
calloc()
realloc()
funksiyalari shu kutubxonada mavjud.
#define nima?¶
#define yordamida dasturda nom berilgan qiymat yaratish mumkin.
Masalan:
#define PI 3.14
Endi dasturda:
PI
deb yozsak, u:
3.14
qiymatini anglatadi.
Oddiy misol¶
#include <stdio.h>
#define PI 3.14
int main() {
printf("%f", PI);
return 0;
}
Natija:
3.140000
Bu yerda PI nomi 3.14 qiymatini ifodalaydi.
#define nima uchun kerak?¶
Masalan, dasturimizda:
100
soni ko‘p marta ishlatiladi.
Shunchaki 100 yozish o‘rniga:
#define MAX 100
deb yozishimiz mumkin.
Keyin:
MAX
deb foydalanamiz.
Masalan:
#include <stdio.h>
#define MAX 100
int main() {
printf("%d", MAX);
return 0;
}
Natija:
100
Qiymatni o‘zgartirish¶
#define ishlatishning foydali tomoni — qiymatni bir joydan o‘zgartirish mumkin.
Masalan:
#define MAX 100
Agar keyinchalik:
#define MAX 200
qilsak, MAX ishlatilgan joylarda yangi qiymat ishlatiladi.
Bu katta dasturlarda qulay.
#define va massiv¶
Masalan, massiv hajmini belgilaymiz:
#include <stdio.h>
#define SIZE 5
int main() {
int sonlar[SIZE] = {10, 20, 30, 40, 50};
for (int i = 0; i < SIZE; i++) {
printf("%d\n", sonlar[i]);
}
return 0;
}
Bu yerda:
SIZE
5 o‘rnida ishlatilmoqda.
Katta harflar bilan yozish¶
#define orqali yaratilgan doimiy qiymatlarni ko‘pincha katta harflar bilan yozamiz.
Masalan:
#define PI 3.14
#define MAX_SIZE 100
#define MIN_AGE 18
Bu majburiy qoida emas.
Lekin dastur kodini o‘qishni osonlashtiradi.
#define bilan matn¶
Faqat son emas, matn ham berish mumkin.
Masalan:
#define SALOM "Salom, dunyo!"
Keyin:
printf("%s", SALOM);
Natija:
Salom, dunyo!
#define va hisoblash¶
#define yordamida ifoda ham yozish mumkin.
Masalan:
#define YOSH 18
int main() {
printf("%d", YOSH + 2);
return 0;
}
Natija:
20
#define va funksiyaga o‘xshash makroslar¶
#define yordamida oddiy makroslar ham yaratish mumkin.
Masalan:
#define QOSH(x, y) ((x) + (y))
Endi:
QOSH(10, 20)
deb yozsak, natija:
30
bo‘ladi.
To‘liq misol:
#include <stdio.h>
#define QOSH(x, y) ((x) + (y))
int main() {
printf("%d", QOSH(10, 20));
return 0;
}
Natija:
30
Hozircha bunday makroslarni ko‘p ishlatish shart emas.
Oddiy #define bilan tanishib olish kifoya.
Preprocessor qachon ishlaydi?¶
C dasturi kompilyatsiya qilinishidan oldin preprocessor ishlaydi.
Masalan:
#define PI 3.14
yozilgan bo‘lsa, preprocessor dasturdagi PI ni kerakli joylarda 3.14 bilan almashtirishga yordam beradi.
Oddiy qilib:
Siz yozasiz:
PI
Preprocessor:
3.14
#include ham preprocessor buyrug‘i¶
Masalan:
#include <stdio.h>
Bu ham preprocessor tomonidan qayta ishlanadi.
Shuning uchun #include va #define oldida:
#
belgisi bor.
#if¶
Preprocessor yordamida shartli kod ham yozish mumkin.
Masalan:
#define DEBUG 1
#if DEBUG
printf("Dastur tekshirilmoqda.");
#endif
Agar DEBUG mavjud bo‘lsa, kodning shu qismi kompilyatsiya qilinadi.
Hozircha #if ni chuqur o‘rganish shart emas.
Bu imkoniyat katta dasturlarda foydali bo‘lishi mumkin.
Eng ko‘p ishlatiladigan preprocessor buyruqlari¶
Hozircha quyidagilarni bilish kifoya:
| Buyruq | Vazifasi |
|---|---|
#include |
Kutubxona yoki faylni qo‘shadi |
#define |
Nomga qiymat yoki makros beradi |
#if |
Shartli kod uchun ishlatiladi |
#endif |
#if qismini tugatadi |
Oddiy amaliy misol¶
Keling, do‘kon mahsulotlari uchun maksimal sonni belgilaymiz:
#include <stdio.h>
#define MAX_PRODUCTS 5
int main() {
int mahsulotlar[MAX_PRODUCTS];
printf("Maksimal mahsulotlar soni: %d", MAX_PRODUCTS);
return 0;
}
Natija:
Maksimal mahsulotlar soni: 5
Agar keyinchalik 10 ta mahsulot kerak bo‘lsa:
#define MAX_PRODUCTS 10
deb o‘zgartiramiz.
const va #define¶
C tilida doimiy qiymat yaratishning yana bir usuli bor:
const
Masalan:
const int yosh = 18;
Bu qiymatni keyinchalik o‘zgartirish mumkin emas.
#define esa preprocessor tomonidan ishlanadi:
#define MAX 100
Hozircha asosiy farqni shunday eslab qoling:
#define → preprocessor orqali ishlaydi
const → C tilidagi o‘zgaruvchi
Keyingi mavzularda const bilan yana ishlaymiz.
Amaliy mashqlar¶
1-mashq¶
PI nomli qiymat yarating:
3.14
Keyin uni ekranga chiqaring.
2-mashq¶
Quyidagilarni #define yordamida yarating:
MAX = 100
MIN = 1
Keyin ularni ekranga chiqaring.
3-mashq¶
SIZE yordamida 5 elementli massiv yarating.
Masalan:
#define SIZE 5
int sonlar[SIZE];
Keyin for yordamida massivni to‘ldiring.
4-mashq¶
Quyidagi makrosni yarating:
#define QOSH(x, y) ((x) + (y))
Keyin:
QOSH(10, 20)
natijasini chiqaring.
5-mashq¶
Quyidagi dastur nima chiqaradi?
#define YOSH 18
int main() {
printf("%d", YOSH + 2);
return 0;
}
Avval javobni o‘ylab ko‘ring.
Muhim narsalarni eslab qoling¶
Kutubxona qo‘shish:
#include <stdio.h>
Doimiy qiymat yaratish:
#define PI 3.14
Massiv hajmini belgilash:
#define SIZE 5
#define bilan matn ham berish mumkin:
#define SALOM "Salom"
Preprocessor buyruqlari # belgisi bilan boshlanadi.
Xulosa¶
Preprocessor C dasturi kompilyatsiya qilinishidan oldin kodni tayyorlashda yordam beradi.
Eng ko‘p uchraydigan buyruqlar:
#include
#define
#if
#endif
Hozircha eng muhim ikkitasini yaxshi tushunib oling:
#include → kerakli kutubxonani qo‘shadi
#define → nomga qiymat yoki makros beradi