16 Директива препроцессора #define

Директивы препроцессора.

Перед компиляцией исходный текст обрабатывается препроцессором.

Для управления препроцессором используются директивы, которые начинаются с #.

Директивы препроцессора могут находится в любом месте программы и их действие распространяется от начала описания и до конца файла.

Директива препроцессора #define

1)#define  идентификатор  текст_подстановки

2)#define  идентификатор. (Список параметров)  текст_подстановки

Форма (1) определяет простую подстановку и используется для того, чтобы связать идентификатор с константой или ключевыми словами, которые часто используются в программе.

В тексте исходного файла, следующего за директивой define, все вхождения идентификатора заменяются текстом_подстановки.

Идентификатор заменяется, если он образует лексему. Идентификатор не заменяется, если он является частью строки или другого идентификатора. Если текст_подстановки занимает более чем одну строку, то его можно продолжить на следующей, поместив в конце строки «\».

Если текст_подстановки пуст, то все вхождения идентификатора удаляются из исходного текста, но идентификатор считается определенным.

#define  PI   3.1415926

#define  AND   &&

Если после идентификатора директивы define следует список параметров, то в исходном тексте, следующем за define, каждое вхождение выражения идентификатор.(список параметров) заменяется на текст_подстановки с условием, что каждое имя в списке формальных параметров должно быть уникальным, а список должен быть заключен в скобки.

Имена формальных параметров в тексте_подстановки отмечают места, куда должны быть вставлены фактические значения. Каждое имя формального параметра может встречаться в тексте в любом порядке и не один раз.

Число фактических аргументов макроса должно совпадать с числом параметров в списке параметров. Если фактический аргумент содержит имя макроса, то прежде чем фактический аргумент заменят на соответствующий формальный параметр, заменится эта команда.

Если имя текущего макроаргумента встретится в тексте_подстановки, то оно не замещается.

Пр.   #define MIN(x,y)   ((x)<(y)?(x):(y)).

Пр.   #define ABS(x)   ((x)<0?-(x):(x)).

 

Пр.   if (c<MAX(a,b))  Message Box (“Меньше”).

 

Пр.   #define KUB(x)  (x*x*x)

b=KUB(a+3);

    

b=(a+3*a+3*a+3)

 

Пр.   #define KUB(x)  ((x)*(x)*(x))

b=KUB(a+3);

   

b=((a+3)*(a+3)*(a+3))

Директива #Undef

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

Может использоваться в программе не один раз.

Hosted by uCoz