Almashtiruvchi qatorda preprotsessor amallari

|
Almashtiruvchi qatorda preprotsessor amallari
|
bet | 52/89 | Sana | 16.11.2023 | Hajmi | 313,45 Kb. | | #100010 |
Bog'liq @AKT Official C haqida o\'zbekcha darslar majmuiAlmashtiruvchi qatorda preprotsessor amallari.
Almashtiruvchi qatorni tashkil qiluvchi leksemalar ketma ketligida ‘#’ va ‘##’ amallarini qo’llash mumkin. Birinchi amal parametr oldiga qo’yilib, shu parametrni almashtiruvchi qator qavslarga olinishi kerakligini ko’rsatadi. Misol uchun:
#define print(A) print(#A”=%f”,A)
makro ta'rif berilgan bo’lsin. U holda makrosga print(a+b) murojaat quyidagi makro kengaytmani hosil kiladi: print(“a+b””%f”,a+b).
Ikkinchi ‘##’ amal leksemalar orasida qullanilib, leksemalarni ulashga imkon beradi.
Quyidagi makrota'rif berilgan bulsin:
#define zero(a,b,c) (bac)
#define one(a,b,c) (b a c)
#define two(a,b,c) (b##a##c)
Makrochakirik: Makrojoylash natijasi:
Zero(+,x,y) (bac)
One(+, x, y) (x + y)
Two(+,x,y) (x+y)
Birinchi holda bas yagona identifikator deb qaralib makro almashtirish amalga oshirilmaydi. Ikkinchi holda makros argumentlari bo’shlik belgilari Bilan ajratilgan bo’lib bu belgilar natijada ham saqlanib koladi. Uchinchi holda makros uchun ‘##’ amali qo’llanilgani uchun natijada bo’shlik belgilarsiz parametrlar ulanadi.
Makroslarning funktsiyadan farki.
Funktsiya dasturda bitta nushada bo’lsa, makros hosil qiluvchi matnlar makros har gal chaqirilganda dasturga joylashtiriladi. Funktsiya parametrlar spetsifikatsiyasida ko’rsatilgan tiplar uchun ishlatiladi va konkret tipdagi qiymat qaytaradi. Makros har qanday tipdagi parametrlar bilan ishlaydi. Hosil qilinayotgan qiymat tipi faqat parametrlar tiplari va ifodalarga boglik. Makrojoylashlardan tug’ri foydalanish uchun almashtiriluvchi satrni qavsga olish foydalidir. Funktsiyaning haqiqiy parametrlari bu ifodalardir, makros argumentlari bo’lsa vergul bilan ajratilgan leksemalardir. Argumentlarga makro-kengaytirishlar qo’llanmaydi.
Oldindan kiritilgan makronomlar.
..LINE.. – o’nlik konstanta o’qilayotgan satr nomeri . Birinchi satr nomeri 1 ga teng.
..FINE.. – fayl nomi . simvollar qatori. Preprotsessor har gal boshqa fayl nomi ko’rsatilgan # include direktivasini uchratganda nom o’zgaradi. # include direktivasi bajarilib bo’lgandan so’ng nom qayta tiklanadi.
..DATE.. – “Oy , sana, yil” formatidagi simvollar satri. Fayl bilan ishlash boshlangan sanani ko’rsatadi.
..TIME.. – “Soatlar : minutlar : sekundlar ” formatidagi simvollar satri. Preprotsessor tomonidan faylni o’qish boshlangan vaqtni ko’rsatada.
..STDC.. – Agar kompilyator ANSI – standart bo’yicha ishlayotgan bo’lsa qiymati 1 ga teng konstanta. Aks holda konstanta qiymati aniqlanmagan.
Borland C++ kompilyatori preprotsessorida qo’shimcha konstantalar kiritilgan:
..BCOPT.. – agar kompilyatsiyada optimizatsiya ishlatilsa qiymati 1 ga teng konstanta.
..BCPLUSPLUS.. – kompilyator versiyasiga mos keluvchi son qiymati.
..CPECL.. – funktsiyalarga parametrlar uzatish tartibini belgilaydi. C ++ da qabul qilingan tartib 1 raqamga tug’ri keladi.
.. CONSOLE.. – 32 razryadli kompilyator uchun aniqlangan va konsal programmalar uchun 1 ga teng.
..DLL.. – WINDOWS DLL rejimida ishlashga mos keladi.
..MSDOS.. -- Borland C++ 16 razryadli kompilyatorlari uchun 1 ga teng va 32 razryadli kompilyator uchun 0 ga teng.
..MT.. – Makros faqat 32 razryadli kompilyatorlar uchun mo’ljallangan.
..OVERLAY.. – overleyi rejimida 1 ga teng.
..PASCAL.. – CDECL ga qarama-qarshi.
..TCPLUSPLUS.. – kompilyator versiyasiga mos keluvchi son qiymati. C++ kompilyatorlari uchun mo’ljallangan.
..TLS.. -- 32 razryadli kompilyatorlar uchun rost deb belgilangan.
..TURBOC.. -- Borland C++ 4.0 kompilyatori uchun 0X0 400 kiymatga teng(Borland C++ 4.5 uchun 0X0 460 va hakazo).
.. WINDOWS.. – WINDOWS uchun kod generatsiyasi .
.. WIN32.. – 32 razryadli kompilyator uchun aniqlangan va konsol dasturlar uchun 1 ga teng.
|
| |