Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C_lect.doc
Скачиваний:
30
Добавлен:
12.11.2018
Размер:
856.06 Кб
Скачать

Термины

Потоком (stream) называется источник или получатель данных, который можно ассоциировать с диском или другим внешним устройством ввода- вывода.

Лекция № 9. Препроцессорные средства

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

Препроцессор языка Си представляет собой программу (подпрограмму), которая используется для обработки исходного файла на нулевой фазе компиляции. Чаще всего препроцессор не отдельная программа, а входит в состав компилятора.

Директивы препроцессора представляют инструкции, записанные в исходном тексте программы. Они обычно используются для того, чтобы облегчить модификацию исходных программ и сделать их более независимыми от особенностей различных реализаций компилятора языка Си, разных компьютеров и операционных сред.

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

  1. Все системно-зависимые обозначения (например, системно-зависимый индикатор конца строки) перекодируются в стандартные коды.

  2. Каждая пара символов «\» и «конец строки» убираются, и тем самым следующая строка присоединяется к исходной.

  3. В тексте распознаются директивы препроцессора, а каждый комментарий заменяется пробелом.

  4. Выполняются директивы препроцессора и выполняются макроподстановки.

  5. ESC-последовательности в строках (символах) заменяются на их эквиваленты (числовые коды).

  6. Смежные символьные строки объединяются в одну строку.

С помощью директив препроцессора можно выполнять следующие действия

  • заменять идентификаторы заранее подготовленными последовательностями символов;

  • включать тексты из файлов;

  • исключать из текста программы отдельные его части (условная компиляция);

  • заменять обозначения параметризованным текстом (макроподстановки).

Определены следующие препроцессорные директивы: #define #include #undef #if #ifdef #else #endif #elif #line #error # ##

Кроме того, обычно в данной теме рассматривают и указания компилятору, внешне похожие на директивы препроцессора. Например, в Microsoft Visual C++ существует указание компилятору #pragma.

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

Директива позволяет заменить некоторый идентификатор в тексте программы на некоторый текст (строку замещения). Формат директивы:

#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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]