#define buyrug'i
#define buyrug'i dastur matnidagi o'rin almashtirishni aniqlaydi. U:
#define matn_nomi almashtiriladi
(nomga kiruvchilarni barchasi o'rin almashtirish matniga almashtiriladi);
funksiyalar kabi ko'rinadigan, lekin ularning matnlarini dastur matniga qo'yish orqali amalga oshiriladigan markoslarni
#define matn_nomi (parameri) almashtiriladi
shartli kompilyatsiyani boshqaruvchi simvollarni. Ular #ifdef va #ifndef buyruqlar bilan birgalikda foydalaniladi. Format:
#define nom
aniqlash uchun qo'llaniladi.
Misollar:
#define VERSION 1
#define VASIA "Ishmatov Diyor”
#define MAX(x,y) ((x)>(y)?(x):(y))
#define MUX
Nomlarni katta harflar bilan yozish tavsiya etiladi, bu ularni o'zgaruvchilar va fayllar nomlaridan farqlash uchun qilinadi. Makros parametrlari makro almashtirishda qo'llaniladi, masalan, agar dastur matnida y = MAX(sum1, sum2); makrosni chaqirish ishlatilayotgan bo'lsa, u
y = ((sum1)>(sum2)?(sum1):(sum2));
bilan almashtiriladi.
Doiraviy qavslarning yo'qligi noto'g’ri hisoblash tartibiga olib kelishi mumkin, chunki protsessor oldi qo'yuvchi matnni sintaksis nuqtai nazaridan baholamaydi. Masalan, agar #define sqr(x) (x*x) makrosga sqr(y+1) kabi murojaat qilinsa, almashtirish natijasida (y+1*y+1) ifoda xosil bo'ladi.
Makroslar va simvolik o'zgarmaslar C tildan meros, C++ da dasturlar yozishdan foydalanmaslik lozim. Simvolik o'zgarmaslar o'rniga const yoki enum lardan, makroslar o'rniga esa – yuklangan funksiya yoki shablonlardan foydalangan ma'qul.
Shartli kompilyatsiya buyruqlari
#if, #ifdef va #ifndef shartli kompilyatsiya buyruqlari dastur alohida qismlarining kompilyatsiyasidan qutilish uchun qo'llaniladi. Bu dasturni sozlashda yoki masalan, turli platformalar uchun dasturning bir nechta talqinlarini qo'llashda foyda beradi.
#if buyrug'i formati:
#if konstanta_ifoda
…
[ #elif konstanta_ifoda
…]
[ #elif konstanta_ifoda
…]
[ #else
…]
#endif
#elif buyruqlar soni – ixtiyoriy. Kodni tashlab yuboruvchi bloklari tavsiflarni ham, bajariluvchi operatorlarni o'z ichiga olishi mumkin. Sarlavhali faylning turli talqinlarini sifatli kiritish misoli:
#if VERSION == 1
#define INCFILE "vers1.h"
#elif VERSION == 2
#define INCFILE "vers2.h" /* va hokazo */
#else
#define INCFILE "versN.h"
#endif
#include INCFILE
Konstanta ifodalarda defined(nom_konstanta) yordamida konstanta aniqlanganligini tekshirishdan foydalanishi mumkin, masalan:
#if defined(__BORLADC__) && __BORLANDC__ == 0x530 // BC5.3;
typedef istream_iterator istream_iter;
#elif defined(__BORLAND__) // BC5.2;
typedef istream_iterator istream_iter;
#else // VC5.0;
typedef istream_iterator, istream_iter;
#endif
Buyruqning boshqa vazifasi – kod parchalarini vaqtincha sharhlash, masalan:
#if 0
int i, j;
double x, y;
#endif
Buyruqlarning ichma-ich joylashishiga ruxsat borligi uchun bunday usul juda qulay.
Ko'pincha dasturlarda #ifdef va #ifndef buyruqlar ishlatiladi, ular #define buyrug'i yordamida ulardagi simvol aniqlangan yoki aniqlanmaganligiga bog'liq ravishda kompilyatsiyani boshqarishga imkon beradi (hech bo'lmaganda bo'sh satr kabi, masalan, #define 32_BIT_SUPPORT);
#ifdef simvol
// agar simvol aniqlangan bo'lsa, quyida joylashgan kod kompilyatsiyalanadi
#ifndef simvol
// agar simvol aniqlanmagan bo'lsa, quyida joylashgan kod kompilyatsiyalanadi
Bu buyruqlar birinchi #elif, #else yoki #endif gacha bajariladi.
#ifndef buyrug'i ko'pincha sarlavha faylni faqat bir marta kiritishni ta'minlash uchun qo'llaniladi:
#ifndef HEADER_INCLUDED
#include "myheader.h"
#define HEADER_INCLUDED
#endif
Do'stlaringiz bilan baham: |