Файлы заголовков
Директива препроцессора include влечет вставку в текущую позицию текста программы на языке Си копии указанного файла.
#include  <file.h>
#include "file.h"
Подобные файлы, называемые файлами заголовков или файлами вставок, обычно содержат директивы define для поименованных констант и макросов, объявления функций, внешних переменных и т.п., необходимые для нескольких исходных файлов. Преимущество подобного выделения в отдельный файл в том, что такие определения локализуются в общем месте. Несколько программ могут включать этот файл и быть уверенными в использовании одинаковой информации. Если необходимо изменение, его можно сделать в одном месте.
По соглашению, имена файлов-вставок имеют расширение .h , что означает файл заголовков (header), названных так потому, что директивы include обычно указываются в начале исходных файлов языка Си. Если имя файла заключено в угловые скобки < и >, препроцессор ищет файл в "стандартном месте". В операционных системах UNIX таким стандартным местом является каталог /usr/include. Если имя файла заключено в двойные кавычки ", используется стандартное соглашение операционной системы для доступа к файлу. В операционных системах UNIX может использоваться полное или относительное путевое имя.
Пример 1
#include "proj.h"
#include "/local/include/x33.h"
#include "../include/defs.h"
Файлы вставки могут быть вложены; файл заголовков может содержать директивы include.
Образец файла заголовков
#define TABLTSIZE 1000
#define SYSNAMELEN 20
#define MASK 010
#define CLEARLINE() while (getchar () != "\n');
#define MAX(A,B) (A>B ? A : B)
extern int status;
extern char sysname[];
extern double table[];
extern void print_err(int);
extern double std_dev(double);
typedef char BYTE;
В файле заголовков не должно быть ни определений функций (программ этих функций), ни определений внешних переменных, по которым выделяется память (например, int x). Иначе, если в нескольких файлах используется один и тот же файл заголовков, возникнут неприятности. При связывании этих файлов редактор связей может сообщить о "многократном определении идентификаторов".
В файле заголовков могут содержаться и другие директивы препроцессора и языка Си, например, операторы typedef, шаблоны структур и объединений (struct, union) и операторы enum.
Организация файлов программы
На рис. 1 приводится типичный способ организации файлов, составляющих программу. Файл заголовков projX.h содержит директивы препроцессора define, объявления внешних переменных и оператор переопределения типа typedef, используемые в файлах с расширением .c.
Файл defs.c определяет только внешние переменные, используемые несколькими файлами. Функции не должны включаться в этот файл.
Файл, содержащий функцию main(), часто называют main.c для простоты идентификации.
Функции, определенные в файлах calc.c и bufct1.c взаимосвязаны и являются составными частями программы .
Рис. 1.  Пример организации файлов программы