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

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

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

функция и макрос и оба выполняют одинаковые действия. Можно рассматривать

это имя как имя функции. Использование имени не для ссылки (например, для

получения адреса) приведет к вызову функции, в то время как ссылка приведет

к замене имени на значение макроса и в результате будет получен более

эффективный но идентичный код. Например, используется функция с именем

'min' в том же исходном файле, где определен макрос с тем же именем.

Если написать '&min' без списка аргументов, то это приведет к вызову функции.

Если же написать 'min (x, bb)' со списком аргументов, то вместо этого будет

произведена замена на значение соответствующего макроса. Если использовать

конструкцию '(min) (a, bb)', где за именем 'min' не следует открывающаяся

скобка, то будет произведен вызов функции 'min'.

Нельзя определять простой макрос и макрос с аргументами с одним именем.

В определении макроса с аргументами список аргументов должен следовать

сразу после имени макроса без пробелов. Если после имени макроса стоит

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

становится значением макроса. Причиной этому является то, что довольно

часто определяются макросы без аргументов. Определение макросов подобным

образом позволяет выполнять такие операции как

#define FOO(x) - 1 / (x)

(где определяется макрос 'FOO', принимающий один аргумент и добавляет минус

к числу, обратному аргументу) или

#define BAR (x) - 1 / (x)

(где определяется макрос 'BAR' без аргументов и имеющий постоянное значение

'(x) - 1 / (x)').

4.3. Заранее определенные макросы

Некоторые простые макросы являются заранее определенными. Их можно

применять без предварительного определения. Они разделяются на два класса:

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