Реферат: Препроцессор языка C.
значению '1020'. Директива '#define' для макроса 'TABLESIZE' использует в
точности те данные, которые были указаны в ее теле и заменяет макрос
'BUFSIZE' на его значение.
4.2. Макросы с аргументами
Значение простого макроса всегда одно и то же при каждом его
использовании. Макросы могут быть более гибкими, если они принимают
аргументы. Аргументами являются фрагменты кода, которые прилагаются при
каждом использовании макроса. Эти фрагменты включаются в расширение макроса
в соответствии с указаниями в макроопределении.
Для определения макроса, использующего аргументы, применяется директива
'#define' со списком имен аргументов в скобках после имени макроса. Именами
аргументов могут быть любые правильные С идентификаторы, разделенные запятыми
и, возможно, пробелами. Открывающаяся скобка должна следовать сразу же после
имени макроса без каких-либо пробелов.
Например, для вычисления минимального значения из двух заданных можно
использовать следующий макрос:
#define min(X, Y) ((X) < (Y) ? (X) : (Y))
Для применения макроса с аргументами нужно указать имя макроса, за
которым следует список аргументов, заключенных в скобки и разделенных
запятыми. Количество принимаемых аргументов должно соответствовать количеству
указываемых. Например, макрос 'min' можно использовать так: 'min (1, 2)' или
'min (x + 28, *p)'.
Значение макроса зависит от используемых аргументов. Каждое имя
аргумента во всем макроопределении заменяется на значения соответствующих
указанных аргументов. При использовании макроса 'min', рассмотренного ранее,
следующим образом:
min (1, 2)
будет получен следующий результат:
((1) < (2) ? (1) : (2))