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