Читайте также:
|
|
Директивы условной компиляции #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 . |