|
Глава 4 - Язык Си - искусный фокусник: создание псевдоимен |
Страница 5 из 12
Возможности директивы #define не исчерпываются только символическим представлением констант. Рассмотрим, например, cледующую программу: #include "alias. h" Странно, текст что-то смутно напоминает, язык немного похож на Паскаль, но программа не похожа на Си-программу. Секрет лежит, конечно, в файле с именем alias.h. Давайте посмотрим, что в нем содержится? alias. h #define program main( ) Этот пример иллюстрирует, как работает препроцессор. Он просматривает вашу программу и проводит поиск элементов, определяемых директивами #define. Обнаружив такие элементы, он полностью заменяет их. В нашем примере во время компиляции все слова then заменяются символами "точка с запятой", end - } и т.д. Результирующая программа будет полностью идентична той, которую мы могли бы получить, если бы с самого начала писали ее в обычных терминах языка Си. Эту мощную возможность языка можно использовать для задания макрокоманд, являющихся одним из вспомогательных средств программирования. Мы вернемся к обсуждению этой темы в гл. 11. Теперь необходимо упомянуть о некоторых ограничениях. На-пример, части программы, заключенные в кавычки, закрыты для подстановок. Операторы, приводимые ниже, служат иллюстрацией такого положения: #define MN "минимифидианизм" Распечатка будет выглядеть так: Oн глубоко верил в MN. Однако после выполнения оператора printf(" Он глубоко верил в %s.\n" , MN); мы получим следующий результат: Он глубоко верил в минимифидианизм. В последнем случае константа с именем MN находилась вне кавычек и поэтому была заменена соответствующим значением. |
|