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 идентификатор
Может использоваться в программе не один раз.