КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Замены в тексте
Стадии и основные команды препроцессорной обработки Лекция 9. Препроцессорные средства Новые термины Потоком (stream) называется источник или получатель данных, который можно ассоциировать с диском или другим внешним устройством ввода- вывода.
Препроцессор языка Си представляет собой программу (подпрограмму), которая используется для обработки исходного файла на нулевой фазе компиляции. Чаще всего препроцессор не отдельная программа, а входит в состав компилятора. Директивы препроцессора представляют инструкции, записанные в исходном тексте программы. Они обычно используются для того, чтобы облегчить модификацию исходных программ и сделать их более независимыми от особенностей различных реализаций компилятора языка Си, разных компьютеров и операционных сред. Стадии препроцессорной обработки 1. Все системно-зависимые обозначения (например, системно-зависимый индикатор конца строки) перекодируются в стандартные коды. 2. Каждая пара символов «\» и «конец строки» убираются, и тем самым следующая строка присоединяется к исходной. 3. В тексте распознаются директивы препроцессора, а каждый комментарий заменяется пробелом. 4. Выполняются директивы препроцессора и выполняются макроподстановки. 5. ESC -последовательности в строках (символах) заменяются на их эквиваленты (числовые коды). 6. Смежные символьные строки объединяются в одну строку. С помощью директив препроцессора можно выполнять следующие действия • заменять идентификаторы заранее подготовленными последовательностями символов; • включать тексты из файлов; • исключать из текста программы отдельные его части (условная компиляция);
• заменять обозначения параметризованным текстом (макроподстановки). Определены следующие препроцессорные директивы: #define #include #undef #if #ifdef #else #endif #elif #line #error # ## Кроме того, обычно в данной теме рассматривают и указания компилятору, внешне похожие на директивы препроцессора. Например, в Microsoft Visual C++ существует указание компилятору #pragma. Директива позволяет заменить некоторый идентификатор в тексте программы на некоторый текст (строку замещения). Формат директивы: #define <идентификатор> [<текст>] Директива может располагаться в любом месте обрабатываемого текста, ее действие от точки размещения до конца текста программы (имеется ввиду, что в текущий файл могут включаться и другие файлы, это все составляет исходный текст программы). Директива определяет идентификатор как препроцессорный (это условие можно далее использовать для условной компиляции). В результате обработки вхождения идентификатора заменяются текстом, окончание которого признак конца строки. Символы пробела в начале и конце текста в подстановке не участвуют. Если текст слишком длинный его можно продолжить на другой строке, использую символ «\». Идентификатор можно переопределять с помощью другого использования #define или отменить его действие с помощью директивы #undef <идентификатор> Директива широко используется в стандартных заголовочных файлах. Например, в файле math.h: #define M_E 2.71828182845904523536 #define M_LOG2E 1.44269504088896340736 #define M_LOG10E 0.434294481903251827651 #define M_LN2 0.693147180559945309417 #define M_LN10 2.30258509299404568402 #define M_PI 3.14159265358979323846 #define M_PI_2 1.57079632679489661923 #define M_PI_4 0.785398163397448309616 #define M_1_PI 0.318309886183790671538 #define M_2_PI 0.636619772367581343076 #define M_2_SQRTPI 1.12837916709551257390 #define M_SQRT2 1.41421356237309504880 #define M_SQRT1_2 0.707106781186547524401
Дата добавления: 2014-01-11; Просмотров: 404; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |