Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Директивы условной компиляции (условные директивы).

Читайте также:
  1. Выполнялись ли директивы Москвы?
  2. Границы условной нормы показателей функции внешнего дыхания
  3. Директивы компилятора и обработка ошибок ввода
  4. Методы условной оптимизации
  5. Направленные на устранение симптомов, а не причин нисходящие директивы
  6. Нормы эмиссии ВВ тракторных двигателей (Директивы 98/67/ЕС, 2000/25/ЕС,Правила ЕЭК ООН № 96) и достигнутые ММЗ результаты

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

Формат директивы #if:

If константное выражение

Elif константное выражение

…]

Elif константное выражение

…]

Else

…]

Endif

Директива #elif используется для создания конструкций вида if - else - if.

Количество директив #elif – произвольное. Исключаемые блоки кода могут содержать как описания, так и исполняемые операторы. Пример условного включения различных версий заголовочного файла:

#if VERSION == 1

#define INCFILE “vers1.h”

#elif VERSION == 2

#define INCFILE “vers2.h” /* и т.д.*/

Else

#define INCFILE “vercN.h”

Endif

Include INCFILE

В константных выражениях может использоваться проверка, определена ли некоторая константа, с помощью defined(имя_константы), например:

#if defined(__BORLANDC__) && __BORLANDC__ == 0x530 //BC5.3

typedef istream_iterator<int, char, char_traits<char>, ptrdiff_t> istream_iter;

…. ….

Else //VC5.0

typedef istream_iterator<int> istream_iter;

Endif

Другое назначение директивы #if – временно закомментировать фрагмент кода, например:

If 0

int i, j;

double x, y;

Endif

Поскольку допускается вложенность директив, такой способ – удобен.

Наиболее часто в программах используются директивы #ifdef, #ifndef, позволяющие управлять компиляцией в зависимости от того, определен ли с помощью директивы #define указанный в них символ (хотя бы как пустая строка, например, #define 32_BIT_SUPPORT):

Ifdef символ

Расположенный ниже код компилируется, если символ определен

Ifndef символ

Расположенный ниже код компилируется, если символ не определен

Действие этих директив распространяется до первого #elif, #else или #endif.

Директива #ifndef часто применяется для того, чтобы обеспечить включение заголовочного файла только один раз:

Ifndef HEADER_INCLUDED

#include “myheader.h”

Define HEADER_INCLUDED

Endif

Другим распространенным примером применения условных директив препроцессора является включение в текст программы отладочной информации. Например:

int main()

{

#ifdef DEBUG

cout << "Начало выполнения main()\n";

#endif

string word;

vector<string> text;

while (cin >> word)

{

#ifdef DEBUG

cout << "Прочитано слово: " << word << "\n";

#endif

text.push_back(word);

}

//...

}

Если константа DEBUG не определена, результирующий текст программы будет выглядеть так:

int main()

{

string word;

vector<string> text;

while (cin >> word)

{

text.push_back(word);

}

//...

}

В противном случае мы получим:

int main()

{

cout << "Начало выполнения main()\n";

string word;

vector<string> text;

while (cin >> word)

{

cout << "Прочитано слово: " << word << "\n";

text.push_back(word);

}

//...

}


Дата добавления: 2015-11-16; просмотров: 48 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Директива #define| Директива #undef .

mybiblioteka.su - 2015-2024 год. (0.006 сек.)