|
- DARS. SHARTLI VA YORDAMCHI DIREKTIVALAR
|
bet | 50/89 | Sana | 16.11.2023 | Hajmi | 313,45 Kb. | | #100010 |
Bog'liq @AKT Official C haqida o\'zbekcha darslar majmui47 - DARS. SHARTLI VA YORDAMCHI DIREKTIVALAR.
Shartli direktiva qo’yidagi ko’rinishga egadir:
#if butun sonli ifoda.
tekst_1
#else
tekst_2
#endif
#else tekst_2 qismi ishlatilishi shart emas.
Direktiva bajarilganda #if dan so’ng yozilgan butun sonli ifoda qiymati hisoblanadi. Agar bu qiymat 0 dan katta bo’lsa tekst_1 kompilyatsiya qilinayotgan matnga qo’shiladi, aksincha tekst_2 qo’shiladi. Agar #else direktivasi va tekst_2 mavjud bo’lmasa bu direktiva o’tkazib yuboriladi.
#ifdef identifikator
direktivasida #define direktivasi yordamida identifikator aniqlanganligi tekshiriladi. Agar identifikator aniqlangan bo’lsa tekst_1 bajariladi.
#ifndef identifikator
direktivasida aksincha shart rost hisoblanadi agar identifikator aniqlanmagan bo’lsa. Dasturga ulash muljallangan fayllarning har biriga bitta fayl ulanish mo’ljallangan bo’lsa, bu fayl bir necha marta dasturga ulanib koladi. Bu qayta ulanishni oldini olish uchun standart fayllar yuqorida ko’rilgan direktivalar yordamida himoya qilingandir. Bu himoya usuli qo’yidagicha bo’lishi mumkin.
/* filename Nomli fayl */
/* FILENAME aniklanganligini tekshirish */
# indef FILE_NAME
… /* Ulanaetgan fayl teksti
/* Ta'rif
#define FILE_NAME
#endif
Tarmoqlanuvchi shartli direktivalar yaratish uchun qo’yidagi direktiva kiritilgan:
#elif butun_sonli_ifoda Bu direktiva ishlatilgan tekst strukturasi:
#if shart
tekst
#elif 1_ifoda
1_tekst
#elif 2_ifoda
2_tekst
…
#else
tekst
#endif
Preprotsesssor avval #if direktivasidagi shartni tekshiradi. Agar shart 0 ga teng bulsa 1_ifoda hisoblanadi agar u ham 0 bulsa 2_ifodani hisoblaydi va hokazo. Agar hamma ifodalar 0 bulsa else uchun kursatilgan tekst ulanadi. Agar biror ifoda 0 dan katta bulsa shu direktivada kursatilgan tekst ulanadi.
48 - DARS.DEFINED OPERATSIYASI.
Tekst shartli qayta ishlanganda unar preprotsessor amali Defined operand amalidan foydalanish mumkin. If defined ifodasi #ifdef operand ifodasiga ekvivalentdir. Bu ko’rinishda defined avfzalligi bilinmaydi. Misol uchun biror tekst kompilyatorga Y identifikatori aniqlangan, N bo’lsa aniqlanmagan holda uzatish lozim bo’lsin. U holda preprotsessor direktivasi qo’yidagicha yoziladi:
#if defined Y&&!defined N
tekst
#endif
Bu direktivani qo’yidagicha ham yozish mumkin.
#ifdef Y
#ifndef N
tekst
#endif
#endif
Yordamchi direktivalar.
Satrlarni nomerlash uchun quyidagi direktivadan foydalanish mumkin:
#line konstanta
Direktiva fakat satr nomeri emas, fayl nomini ham uzgartirishi mumkin:
#line konstanta “fayl nomi”
Odatda bu direktiva kam ishlatiladi.
Quyidagi direktiva leksemalar ketma ketligi orqali kursatilgan shaklda diagnostik ma'lumotlar berilishiga olib keladi.
# error leksemalar ketma ketligi.
Misol uchun NAME preprotsessor o’zgaruvchisi aniqlangan bo’lsin:
#define NAME 5
Dasturda bu o’zgaruvchi qiymatini teshirib, 5 ga teng bo’lmagan holda ma'lumot berish uchun qo’yidagi direktivadan foydalaniladi:
#if (NAME!=5)
#error NAME 5 ga teng bo’lishi kerak
Hech qanday hizmat bajarmaydigan direktiva: #
|
| |