При каждом запуске компилятора сначала запускается препроцессор, который выполняет директивы начинающиеся с символа #. При выполнении этих команд создается временный файл исходного кода, с которым уже работает компилятор.
Директива #include
Строка
#include "имя файла"
Заменяет эту строку полным содержимым файла имя. файла. Если не указан путь то файл сначала ищется в директории исходного файла , затем в директории заданной в опциях компилятора(обычно директория Include).
Строка #include <имя файла>
Ищет файл только в директории заданной в опциях компилятора.
Директива #define
#define идентификатор строка символов
Заменяет все последующие вхождения идентификатора строкой символов. Пример:
#define A_NUMBER 100
int n=A_NUMBER;
n присвоится значение 100
#define можно применять также для определения макросов, например:
#define SWAP(a,b) temp=(a);(a)=(b);(b)=temp
Подробнее о #define (и в частности о макросах) будет отдельная статья.
Директива #undef
#undef идентификатор
Отменяет прероцессорное определение идентификатора.
Директивы #if #else #endif
#if выражение
.....
#endif
Проверяет истинно ли выражение и если истинно, то выполняет все последующие строки до директивы #endif.
Конструкция типа:
#if выражение
....
#else
...
#endif Проверяет выражение, если оно истинно то выполняются строки между #if и #else а если ложно то между #else и #endif.
Директивы #ifdef #ifndef
#ifdef идентификатор
.....
#endif
Проверяет определен ли идентификатор в препроцессоре в данный момент(директивой #define) и если определен, то выполняет все последующие строки до директивы #endif.
#ifndef идентификатор
.....
#endif
Наоборот, выполняет все последующие строки до директивы #endif если идентификатор не определен в препроцессоре в данный момент.
Директива #error
#error - сообщение об ошибке. Останавливает работу компилятора и выдает сообщение об ошибке. Например:
#ifndef smth_important
#error smth important isn't defined
#endif
Компилятор выдаст что-то типа:
Fatal F1003 file.cpp 2: Error directive: smth important isn't defined
*** 1 errors in Compile ***
Директива #line
Директива
#line константа "имя файла"Заставляет компилятор считать, что константа задает номер следующей строки исходного файла, и текущий входной файл именуется идентификатором. Если идентификатор отсутствует, то запомненное имя файла не изменяется.
Директива #pragma
#pragma - это директива препроцессора, которая реализует возможности компилятора. Эти особенности могут быть связанны с типом компилятора.Разные типы компиляторов могут поддерживать разные директивы. Общий вид директивы:
#pragma команда компилятора
Например:
#pragma message("сообщение") - просто выдает сообщение при компиляции.