Dasturda cout<< (“% 6.1f “, A(i,j)); ifoda makros joylashdan so’ng quyidagi ko’rinishga keladi.
cout<< (“% 6.1f “, x[5(i-1)+(y-1)]);
Almashinuvchi qatorda preprotsessor amallari
Almashtiruvchi qatorgi tashkil qiluvchi leksimalar ketma – ketligida “#” va “##” amallarini qo’llash mumkin. Birinchi amal parametr oldiga qo’yilib, shu parametrni almashtiruvchi qator qavslarga olinishi kerakligini ko’rsatadi.
#define print(A) printf(#A“=%f”,A)
Yuqoridagi makro ta’rif berilgan bo’lsin. U holda makrosga print(a+b) murojaat quyidagi makro kengaytmani hosil qiladi:
print(“a+b”“%f”,a+b).
Ikkinchi “##” amal leksimalar orasida qo’llanilib, leksemalarni ulashga imkon beradi. Quyidagi makro ta’rif berilgan bo’lsin:
#define zero(a,b,c) (bac)
#define one(a,b,c) (b a c)
#define two(a,b,c) (b##a##c)
Makro chaqiriq
|
Makrojoylash natijasi
|
Zero(+,x,y)
|
(bac)
|
One(+,x,y)
|
(x + y)
|
Two(+,x,y)
|
(x+y)
|
Birinchi holda bac yagona identifikator deb qaralib makro almashtirish amalga oshirilmaydi. Ikkinchi holda makros argumentlari bo’shlik belgilari bilan ajratilgan bo’lib, bu belgilar natijada ham saqlanib qoladi. Uchinchi holda makros uchun “##” amali qo’llanilgani uchun natijada bo’shlik belgilarsiz parametnlar ulanadi.
Shart direktivalar va ulardan foydalanish
Shartli direktiva quyidagi 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 hisoblanganda tekst_2 bajariladi. Dasturga ulash mo’ljallangan fayllarning har biriga bitta fayl ulanish ulanish mo’ljallangan bo’lsa, bu fayl bir necha marta dasturga ulanib qoladi. Bu qayta ulanishni oldini olish uchun standart fayllar yuqorida ko’rilgan direktivalar yordamida himoya qilingandir. Bu himoya usuli quyidagicha bo’lishi mumkin.
/* filename nomli fayl */
/* filename aniqlanganligini tekshirish */
# ifdef FILE_NAME
// ulanayotgan fayl matni ta’rifi
#define FILE_NAME
#endif
Do'stlaringiz bilan baham: |