Директивы препроцессора .

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

Существует строго определенный набор возможных директив, который включает в себя следующие определения:

#define, #elif, #else, #endif, #if, #ifdef, #ifndef, #include, #undef.

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

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

или

#define <идентификатор> (<список параметров>) <текст>

 

Пример использования директивы #define.

#include <stdio.h>

#define TWO 2

#define FOUR TWO*TWO

#define PX printf("X равно %d.\n", x)

#define FMT «X равно %d.\n»

#define SQUARE(X) X*X

int main()

{ int x = TWO;

PX;

x = FOUR;

printf(FMT, x);

x = SQUARE(3);

PX;

return 0; }

После выполнения этой программы на экране монитора появится три строки:

X равно 2.

X равно 4.

X равно 9.

Директива #undef отменяет определение, введенное ранее директивой #define. Предположим, что на каком-либо участке программы нужно отменить определение константы FOUR. Это достигается следующей командой:

#undef FOUR

Интересной особенностью данной директивы является возможность переопределения значения ранее введенной константы.

Действительно, повторное использование директивы #define для ранее введенной константы FOUR невозможно, т.к. это приведет к сообщению об ошибке в момент компиляции программы. Но если отменить определение константы FOUR с помощью директивы #undef, то появляется возможность повторного использования директивы #define для константы FOUR.

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

Пример: программа выполняет подключение библиотек в зависимости от установленных констант.

#if defined(GRAPH)

#include <graphics.h> //подключение графической библиотеки

#elif defined(TEXT)