Препроцессор
Собственно говоря, препроцессор не имеет никакого отношения к языку. Это предварительная фаза трансляции, которая выполняет обработку текста программы, не вдаваясь глубоко в ее содержание. Он производит замену одних частей текста на другие, при этом сама программа так и остается в исходном виде.
#define идентификатор строка_текста
Директива обеспечивает замену встречающегося в тексте программы идентификатора на соответствующую строку текста. Наиболее часто она применяется для символического обозначения константы, которая встречается многократно в различных частях программы. Например, размерность массива:
#define SIZE 100
int A[SIZE];
...
for (i=0; i<SIZE; i++) {...}
В данном примере вместо имени SIZE в текст программы будет подставлена строка, содержащая константу 100. Теперь, если нас не устраивает размерность массива, нам достаточно увеличить это значение в директиве define и повторно оттранслировать программу.
#define идентификатор(параметры) строка_с_параметрами
#define FOR(i,n) for(i=0; i<n; i++)
FOR(k,20) A[k]=0; // for(k=0; k< 20; k++) A[k]=0;
FOR(j,m+2) {...} // for(j=0; j<m+2; j++) {...}
В таком варианте директива define представляет собой МАКРООПРЕДЕЛЕНИЕ , а замена в тексте программы идентификатора с параметрами на строку - МАКРОПОДСТАНОВКУ .
#include <имя_файла>
#include "имя_файла"
В текст программы вместо указанной директивы включается текст файла, находящегося в системном или, соответственно, в текущем (явно указанном) каталоге. Наиболее часто в программу включаются тексты заголовочных файлов, содержащие необходимую информацию транслятору о внешних функциях, находящихся в других объектных модулях и библиотеках. Например,
#include <stdio.h>
включает в программу текст заголовочного файла, содержащего объявления внешних функций из библиотеки стандартного ввода-вывода.
Аналогичные средства в других языках программирования носят название МАКРОПРОЦЕССОР , МАКРОСРЕДСТВА . Полный перечень директив препроцессора приведен в Приложении 4.