Include, # define, # undef директивалары

Си трансляторының препроцессор деп аталатын ендірілген құралы бар. Ол бағдарламаны компиляцияға дейін қарастырады (осыдан препроцессор термині шыққан) және бағдарламадағы барлық символдық аббревиатураларды сәйкес директиваларға ауыстырады, көрсетілген файлдарды қосады. Препроцессор үшін бағдарлама жолдары # символынан басталады.

Файлдарды қосу үшін # includeдирективасын пайдаланған болатынбыз.

Препроцессордың басқа директиваларын қарастырайық:

# define <идентификатор> < ауыстыру>

Бұл директива бағдарламадағы идентификатор орнына ауыстыру мәтінін қояды. Егер директива келесі түрде болса:

# define идентификатор (идентификатор,…идентификатор)

онда ол аргументтері бар макроауыстырудың анықтамасы.

Мысал 1:

# define FOOR TWO*TWO

# define PX printf(“x тең %d\n”,x)

#define FNT “x тең % d\n”

# include<stdio.h>

# define TWO 2

main ()

{ int x=TWO;

PX;

x=FOOR;

printf(FNT,X);

}

Бағдарлама орындалған соң экранға келесі жазу шығады:

Х тең 2

Х тең 4

Мысал 2. Аргументтері бар # define директивасының мысалын қарастырайық. Ондай директивалармен өте мұқият жұмыс істеу керек.

# include<stdio.h>

# define KV(X) X*X

# define PR(X) printf(“X тең %d\n”,X)

main ()

{ int x=4;

int z;

z=KV(x);

PR(z);

PR(х);

PR(KV(x+2));

pr(100/KV(2));

}

Бағдарламадағы KV(x) x*x ауыстырылады.

Бағдарлама жұмысының нәтижесі:

z тең 16

х тең 4

KV (x+2) тең 14

100/KV (2) тең 100

Бірінші екі жол түсінікті, ал KV (x+2) 36-ға, 100/KV (2) 50-ге тең болу керек, бірақ нәтижелері мүлдем басқа. Оның себебі Х*Х орнына Х+2*Х+2 және 100/2*2 қойылады. Егер KV (x+2) дұрыс шығарылсын десеңіз, формуланы келесідей жазу қажет:

# define KV(X) (X)*(X)

Онда KV (Х+2) орнына (Х+2)*(Х+2) қойылады.

#undef ең соңғы анықталған идентификаторды жояды. Жазылу түрі:

#undef идентификатор

Мұндағы идентификатор – #define директивасымен анықталған идентификатор:

#undef ESCAPE

Бұл процедураның орындалуынан кейін ESCAPE идентификаторы анықталмайды.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: