Опубликован: 26.08.2005 | Уровень: для всех | Доступ: платный | ВУЗ: Новосибирский Государственный Университет
Лекция 2:

Данные, символьные строки, директива #define

< Лекция 1 || Лекция 2: 1234 || Лекция 3 >

Условная компиляция обладает следующими достоинствами:

  1. Обеспечивается средство параметризации во время компиляции. Например, такая возможность может быть использована для генерации программ с различной структурой.
  2. Обеспечивается эффективное использование оперативной памяти, поскольку во время выполнения нет необходимости держать в памяти неиспользуемые коды программы.
  3. Обеспечивается возможность принятия решений во время компиляции, а не во время выполнения. Часто это оказывается более эффективным подходом.

Для условной компиляции используется инструкция препроцессора if. Она имеет две формы - с частью else и без нее:

#if - заголовок
текстовые строки для случая "истина"
#endif

и

#if - заголовок
текстовые строки для случая "истина"
#else
текстовые строки для случая "ложь"
#endif

где if - заголовок является управляющей строкой препроцессора, а текстовые строки могут содержать произвольный текст. Управляющая строка препроцессора if -заголовка содержит условие, на основе анализа которого производится выбор соответствующих текстовых строк:

#if константное_выражение

Пример:

#ifdef ABC
Истина, если идентификатор ABC определен ранее 
командой #define.
#ifndef идентификатор

Пример:

#ifndef ABC
Истина, если идентификатор ABC не определен 
в настоящий момент.
#else
...
#endif

Если предшествующие проверки #if, #ifdef или #ifndef дают значение Истина, то строки от #else до #endif игнорируются при компиляции. Если эти проверки дают значение Ложь, то строки от проверки до #else, а при отсутствии #else - до #endif, игнорируются. Команда #endif обозначает конец условной компиляции.

Пример:

#ifdef DEBUG
fprintf (stderr, "location. X=%d\n",x);
#endif

При помощи команд препроцессора можно изменить номер текущей строки или имя компилируемого файла:

#line целая_константа "имя_файла"

Пример:

#line 20 "ABC"

Препроцессор изменяет номер текущей строки и имя компилируемого файла. Имя файла может быть опущено.

Замечание. Хотя препроцессоры и расширяют возможности языков программирования, их использование не лишено недостатков: использование препроцессоров требует дополнительного просмотра текста программы и, как следствие, добавочного времени.

< Лекция 1 || Лекция 2: 1234 || Лекция 3 >
Иван Руднев
Иван Руднев
Фраза "Структурная переменная описывается с помощью переменной структурного типа" на мой Взгляд является тафтология. Из нее сложно понять суть утверждения. Хотелось бы полке понятного описания.
Руслан Поддубный
Руслан Поддубный

"

printf("Добро пожаловать!\n");  - на консоль выводится непонятный набор знаков вместо русского текста.

 

иван викулов
иван викулов
Россия, г. Сургут
Михаил Кореньков
Михаил Кореньков
Россия, г. Сургут