русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Замены в тексте


Дата добавления: 2013-12-23; просмотров: 1353; Нарушение авторских прав


Стадии и основные команды препроцессорной обработки

Лекция № 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

 



<== предыдущая лекция | следующая лекция ==>
Функции для сброса буферов | Условная компиляция


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.003 сек.