Си++/Препроцессорные директивы: различия между версиями

Материал из Викиучебника — открытых книг для открытого мира
Содержимое удалено Содержимое добавлено
мНет описания правки
Строка 38: Строка 38:


===Директива #undef===
===Директива #undef===
Директива #undef удаляет текущее определение идентификатора. Поэтому все встречающиеся появления идентификатора будут игнорироваться предпроцессором. Для удаления определения макро с использованием #undef, нужно задать только идентификатор макро, не задавая список параметров.

Можно применить директиву #undef к идентификатору, у которого нет определения. Тем самым пользователь получает дополнительную гарантию того, что данный идентификатор не определен.

Директива #undef обычно используется в паре с директивой #define для задания области исходной программы, в которой идентификатор имеет специальное значение. Например, некоторая функция исходной программы может иметь объявленные константы, которые задают значения среды работы, которые не влияют на остальную часть программы. Директива #undef также работает с директивой #if для управления условной компиляцией исходной программы.


===Условные директивы #if, #ifdef, #else, #endif, #elif===
===Условные директивы #if, #ifdef, #else, #endif, #elif===

Версия от 23:49, 18 января 2007

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

Таких команд немного, они все начинаются со знака решётки (#) и должны быть в начале строки исходного кода:

#define
эта директива предусматривает определение макросов или препроцессорных идентификаторов, простейшее применение это замены в тексте программы
#include
позволяет включать текст других файлов в текст вашей программы.
#undef
отменяет действие директивы #define
#if
организация условной обработки директив
#ifdef
организация условной обработки директив
#else
организация условной обработки директив
#endif
организация условной обработки директив
#elif
организация условной обработки директив
#line
управление нумерацией строк в тексте программы
#error
задает текст диагностического сообщения, выводящиеся при наличии ошибок
#pragma
зависит от среды разработки
#
нулевая, или пустая, директива, бездейственно пропускается


Директива #define

Директива #define служит для замены часто использующихся констант, ключевых слов, операторов или выражений некоторыми идентификаторами. Идентификаторы, заменяющие текстовые или числовые константы, называют именованными константами. Идентификаторы, заменяющие фрагменты программ, называют макроопределениями, причем макроопределения могут иметь аргументы.

Основная форма синтаксиса директивы #define:

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

Так например, в программе:

#define N 5
int main()
{
    int a;
    a = N;
    return 0;
}

Переменная а примет значение 5.

Директива #include

Директива #undef

Директива #undef удаляет текущее определение идентификатора. Поэтому все встречающиеся появления идентификатора будут игнорироваться предпроцессором. Для удаления определения макро с использованием #undef, нужно задать только идентификатор макро, не задавая список параметров.

Можно применить директиву #undef к идентификатору, у которого нет определения. Тем самым пользователь получает дополнительную гарантию того, что данный идентификатор не определен.

Директива #undef обычно используется в паре с директивой #define для задания области исходной программы, в которой идентификатор имеет специальное значение. Например, некоторая функция исходной программы может иметь объявленные константы, которые задают значения среды работы, которые не влияют на остальную часть программы. Директива #undef также работает с директивой #if для управления условной компиляцией исходной программы.

Условные директивы #if, #ifdef, #else, #endif, #elif

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

Директива #line

Директива #error

Директива #pragma

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

Макросы

Предопределенные макроимена