Условные конструкции препроцессора позволяют компилировать или пропускать часть программы в зависимости от выполнения некоторого условия. Условие может принимать одну из описываемых ниже форм.
#if константное_выражение
Проверяется значение выражения, составленного из констант и если оно не равно нулю, компилируется (включается) последующий текст.
#ifdef идентификатор
Последующий тест компилируется, если "идентификатор" уже был определен для препроцессора в команде #define.
#ifndef идентификатор
Последующий текст компилируется, если "идентификатор" в данный момент не определен. Конструкция
#undef идентификатор
исключает "идентификатор" из списка определенных для препроцессора имен. За любой из трех условных команд может следовать произвольное число строк текста, содержащих, возможно, команду вида #elseи заканчивающихся #endif.Если проверяемое условие справедливо, то строки между #elseи #endifигнорируются. Если же проверяемое условие не выполняется, то игнорируются все строки между проверкой и командой #else,а если ее нет, то командой #endif.
Приведенная программа иллюстрирует применение некоторых из рассмотренных выше команд, обеспечивающих условную компиляцию.
Пример:
#define SIZE 16 // определение SIZE
#include <stdio.h>
main()
{
char c='A';
#ifndef SIZE // если SIZE не определено
int x=123;
printf("x=%dn",x);
#else
static char x[SIZE]="информатика";
printf("x=%sn",x);
#endif
printf("%cn",c);
}
Результат работы приведенной выше программы:
информатика
А
#include <stdio.h>
main()
{
char c='A';
#ifndef SIZE
int x=123;
printf("x=%dn",x);
#else
static char x[SIZE]="информатика";
printf("x=%sn",x);
#endif
printf("%cn",c);
}
При таком определении результатом работы программы будет:
А
4.2. Директива #undef.
Директива #undef используется для отмены действия директивы #define. Синтаксис этой директивы следующий:
#undef идентификатор
Директива отменяет действие текущего определения #define для указанного идентификатора. Не является ошибкой использование директивы #undef для идентификатора, который не был определен директивой #define.
Пример:
#undef WIDTH
#undef MAX
Эти директивы отменяют определение именованной константы WIDTH и макроопределения MAX.
Задание для самоконтроля:
Что будет выведено в результате выполнения программы:
#include<iostream.h>
#define min(n,m) ( (n) < (m) ? (n) : (m))
main()
{
int rlst,num1=1,num2=7;
for(int I=0;I<4;I++)
{
rlst=min(++num1,num2);
cout <<"n min "<<I+1<<"="<<rlst;
}
}