Препроцессором называется инструмент, который подобно фильтру обрабатывает исходный код приложения перед его компиляцией. То есть, любые объявленные макросы заменяются на соответствующие значения, после чего осуществляется компиляция обработанного исходного кода. Макросы особенно полезны для установки начальных значений переменных в зависимости от используемой при компиляции архитектуры центрального процессора, хотя они также могут использоваться для решения простых задач, таких, как подстановка номера версии приложения или пути к его статическим ресурсам.
После подстановки значения макроса в код препроцессором это значение не может быть изменено без перекомпиляции тех файлов исходного кода, где оно было использовано.
Объявления макросов обычно размещаются в начале файла исходного кода программы.
#define MAXCONNECTIONS 10
После этого препроцессор будет обрабатывать исходный код и заменять все встречающиеся в нем имена макроса на его значение.
При необходимости объявление макроса может быть аннулировано. Для установки нового значения макроса его объявление должно быть аннулировано.
#undef ITEMS
Директива препроцессора include уже не раз использовалась в примерах. Она имеет два формата.
#include <file.h>
#include "file.h"
При использовании скобок (#include <file.h>) компилятор ищет заголовочный файл file.h и подключает его к коду программы. В случае использования кавычек (#include "file.h") заголовочный файл для подключения к коду программы ищется в текущей директории. Директива препроцессора #include обычно используется для подключения к коду программы заголовочного файла, а не файла исходного кода.
Препроцессор может использовать условные инструкции для включения фрагментов исходного кода или объявлений макросов в исходный код программы в зависимости от значений тех или иных макросов.
#ifdef linux
#define AVAILABLE 64
#else
#define AVAILABLE 32
#endif
Также имеется возможность использования условной инструкции с отрицанием.
#ifndef windows
#define MEMORY 128
#else
#define MEMORY 192
#endif
Установка значений макросов может осуществляться на этапе вызова компилятора путем использования параметра -D; в этом случае они будут обрабатываться также, как и макросы из файлов исходного кода.
gcc -DLINELENGTH=80 myprogram.c
Это просто вариант директивы препроцессора #define для времени компиляции.
В примере показана подстановка числового значения объявленного разработчиком макроса.