Preprosessor — kompilyatsiyadan oldin ishlaydigan maxsus bosqich. U kodni haqiqiy kompilyatsiyaga tayyorlaydi: kutubxonalarni ulaydi, doimiylarni almashtiradi, kod qismlarini shartli qo’shadi. Preprosessor buyruqlari # belgisi bilan boshlanadi va C’ning o’ziga xos, kuchli imkoniyatidir.
Preprosessor — kompilyatsiyadan oldin manba kodni qayta ishlaydigan dastur. Uning direktivalari (
#include,#define,#if)#bilan boshlanadi va nuqta-vergulsiz yoziladi.
#include — kutubxona ulash
Eng ko’p ishlatiladigan direktiva — #include. U boshqa faylning tarkibini shu joyga qo’shadi:
#include <stdio.h> /* standart kutubxona */
int main(void) {
printf("UzbekDevs\n");
return 0;
}
UzbekDevs
#include <stdio.h> — printf kabi funksiyalarni ulaydi. Burchak qavs < > — standart kutubxonalar uchun, qo’shtirnoq " " esa o’z fayllaringiz uchun ishlatiladi.
#define — doimiy va almashtirish
#define matnni kompilyatsiyadan oldin almashtiradi. U doimiy yaratishda ishlatiladi:
#include <stdio.h>
#define PI 3.14159
#define SAYT "UzbekDevs"
int main(void) {
printf("Pi: %.2f\n", PI);
printf("Sayt: %s\n", SAYT);
return 0;
}
Pi: 3.14
Sayt: UzbekDevs
Preprosessor kodda uchragan har bir PI ni 3.14159 ga almashtiradi. Bu — matnni oddiy almashtirish, shuning uchun PI turga ega emas.
Preprosessor direktivalari
Asosiy direktivalarni jadvalda ko’ramiz:
| Direktiva | Vazifasi |
|---|---|
#include |
fayl tarkibini qo’shadi |
#define |
doimiy yoki makros yaratadi |
#ifdef / #ifndef |
shartli kompilyatsiya |
#endif |
shartli blokni yopadi |
Shartli kompilyatsiya
Preprosessor kod qismlarini shartga qarab qo’shishi yoki tashlashi mumkin. Bu ko’pincha kutubxona fayllarining ikki marta ulanishini oldini olishda ishlatiladi:
#include <stdio.h>
#define DEBUG
int main(void) {
#ifdef DEBUG
printf("Debug rejimi yoqilgan\n");
#endif
printf("Dastur ishlamoqda\n");
return 0;
}
Debug rejimi yoqilgan
Dastur ishlamoqda
#ifdef DEBUG — DEBUG aniqlangan bo’lsagina, ichidagi kod kompilyatsiyaga qo’shiladi. Bu nosozliklarni tekshirish kodini oson yoqib-o’chirishda foydali.
Xulosa
Bu bo’limda preprosessor tushunchasini, #include, #define direktivalarini va shartli kompilyatsiyani (#ifdef) ko’rib chiqdik. Preprosessor — kompilyatsiyadan oldingi kuchli bosqich. Keyingi darsda makroslarni chuqurroq ko’rib chiqamiz.