Дополнительные сведения о препроцессоре языка C.
Препроцессор обрабатывает текст программы перед компиляцией.
1. Включение файлов (рассмотрено ранее):
#include <conio.h> - файл из специального каталога;
#include "d:\\user\\ff.h" - файл ищется по правилам MS DOS.
2. Текстовые подстановки (рассматривалось ранее):
#define N 21
#define ABC (a*b*c+\
d*sin(x))
\ - переход на следующую строку.
3. Создание макросов.
#define SQR(x) ((x)*(x))
В результирующую строку подставляется фактическая строка x. Например, если в тексте программы встречается SQR(y), то после макрораскрутки получим ((y)*(y)). Скобки нужны для того, чтобы не получилось недоразумений, например
#define SQR(x) x*x
SQR(y+2); превратится в
y+2*y+2;
Конечно, это не то, что хотелось.
4. Отмена ранее созданного имени:
#undef SQR.
5. Условная компиляция:
#if константное выражение
.
. строки программы
.
#else
.
. строки программы
.
#endif
Если константное выражение истинно, то в программу будут включены строки из первого блока, иначе из второго.
Пример:
#define DEBUG 1
.
.
.
#if DEBUG
printf("%d", x);
#endif
Можно проверить наличие или отсутствие какого-либо имени:
#ifdef имя (если имя определено, то истина)
.
.
.
#else
.
.
.
#endif
#ifndef имя (если имя не определено)
.
.
.
#else
.
.
.
#endif
Это свойство широко используется в библиотечных включаемых файлах, чтобы избежать противоречия. Например, в conio.h имеются следующие строки:
#ifndef COLORS
enum COLORS {BLACK, ...};
#endif
Дата добавления: 2014-12-18; просмотров: 556;