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

Int II, jj, ll; // целые внешние переменные

extern float aa, bb; // вещественные внешние переменные

Термин «заголовочный файл» обусловлен тем, что включение заголовочных файлов необходимо помещать в начале текста программы, т.е. заведомо раньше обращений к объектам и функциям, определенным в данном файле. Хотя заголовочный файл может быть включен в программу не в ее начале, а непосредственно перед обращением к функции, описанной в заголовочном файле, этого делать не рекомендуется.

Условная компиляция

Директивы #if, #ifdef, #ifndef, #else, #endif, #elif называют директивами условной компиляции. Они позволяют организовать услов­ную (в зависимости от результата выполнения некоторого условия) препроцессорную обработку текста программы. Таким образом, из последующего процесса компиляции можно исключить часть текста программы. Поэтому перечисленные директивы называются директивами условной компиляции, хотя, как и все директивы препроцессора, они управляют препроцессорной обработкой текста программы до ее компиляции.

Директивы #if, #ifdef, #ifndef выполняют проверку условий.

Общая структура их применения имеет следующий формат:

#if | #ifdef | #ifndef условие

текст_1

[#else

текст_2]

#endif

Директива #endif указывает окончание действия директивы #if (#ifdef, #ifndef).

Текст_1 вклю­чается в компилируемый текст только при истинности прове­ряемого условия.

Директива #else определяет начало альтернативной ветви и не является обязательной. Если условие ложно, то при ее наличии в компилируемый текст включается текст_2, при ее отсутствии весь текст от #if до #endif опуска­ется.

Различие между директивами #if, #ifdef и #ifndef состоит в типе проверяемого условия.

Директива #if имеет формат

#if выражение

Выражение может содержать целые константы и идентификаторы. Если идентификаторы определены на препроцессорном уровне, их значение определяется макроподстановками, в противном случае они имеет нулевые значения. Проверяемое условие истинно, если константное выражение отлично от нуля.

Пример:

В результате препроцессорной обработки директив:

#if 5+4

текст_1

#endif

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

Данная директива может использоваться для того, чтобы временно закомментировать фрагменты кода.

Пример:

#if 0

int i, j;

double x, y;

#endif

Директива #ifdef имеет формат

#ifdef идентификатор

Проверяемое условие истинно, если идентификатор является препроцессорным, т.е. ранее определен директивой #define.

Директива #ifndef имеет формат

#ifndef идентификатор

Проверяемое условие истинно, если идентификатор не является препроцессорным, т.е. ранее не определен директивой #define или его определение бы­ло отменено директивой #undef.

Определение идентификатора, управляющего условной компиляцией, осуществляется с помощью третьей модификации директивы #define:

#define идентификатор

Строка замещения в данном случае отсутствует.

Директиву #ifdef удобно применять при отладке про­грамм для включения или исключения средств вывода кон­трольных сообщений.