Реферат: Препроцессор языка C.

При указании аргументов, скобки должны закрываться, а запятая не должна

завершать аргумент. Однако, не существует каких либо ограничений на

использование квадратных или угловых скобок. Например

macro (array[x = y, x + 1])

передает макросу 'macro' два аргумента: 'array[x = y' и 'x + 1]'.

После подстановки указанных аргументов в тело макроса, полученный в

результате текст добавляется к началу оставшихся данных и производится

проверка на наличие других вызовов макросов. Поэтому указываемые аргументы

могут содержать ссылки к другим макросам как с аргументами, так и без, а

также к тому же макросу. Тело макроса также может включать ссылки к другим

макросам. Например, макрос 'min (min (a, b), c)' заменяется следующим

текстом:

((((a) < (b) ? (a) : (b))) < (c)

? (((a) < (b) ? (a) : (b)))

: (c))

(Срока разбита на три для ясности и в действительности она не разбивается.)

Если макрос 'foo' принимает один аргумент и нужно передать ему пустой

аргумент, то в скобках следует указать по крайней мере один пробел:

'foo ( )'. Если пробел не указывать, а макрос 'foo' требует один аргумент,

то произойдет ошибка. Для вызова макроса, не принимающего аргументы, можно

использовать конструкцию 'foo0()' как рассмотрено ниже:

#define foo0() ...

Если используется имя макроса, за которым не следует открывающаяся

скобка (после удаления всех следующих пробелов, символов табуляции и

комментариев), то это не является вызовом макроса и препроцессор не изменяет

текст программы. Поэтому возможно использование макроса, переменной и функции

с одним именем и в каждом случае можно изменять, когда нужно применить макрос

(если за именем следует список аргументов), а когда - переменную или функцию

(если список аргументов отстутствует).

К-во Просмотров: 656
Бесплатно скачать Реферат: Препроцессор языка C.