Препроцессор
Материал из cppreference.com
< cpp
Препроцессор работает во время выполнения фазы трансляции №4, до компиляции. Результат препроцессинга — один файл, который затем передается непосредственно компилятору.
[править] Директивы
Препроцессинговые директивы контролируют поведение препроцессора. Каждая директива занимает одну строку и имеет следующий формат:
- символ
#
- препроцессинговая инструкция (одна из
define
,undef
,include
,if
,ifdef
,ifndef
,else
,elif
,endif
,line
,error
,warning
,pragma
) [1] - аргументы (в зависимости от инструкции)
- перевод строки
Нулевая директива (символ #
, за которым следует перевод строки) допускается и не имеет никакого эффекта.
[править] Возможности
Препроцессор имеет следующие возможности модификации исходного кода:
- условная компиляция частей исходного файла (контролируется директивами
#if
,#ifdef
,#ifndef
,#else
,#elif
и#endif
) - замена текстовых макросов с возможностью конкатенации и заключения в кавычки идентификаторов (контролируется директивами
#define
и#undef
и операторами#
и##
) - включение других файлов (контролируется директивой
#include
) - вызов предупреждения (контролируется директивой
#warning
) - вызов ошибки (контролируется директивой
#error
)
Следующими аспектами препроцессора можно управлять:
- определяемое реализацией поведение (управляется директивами
#pragma
) - информация об имени файла и номере строки, доступная препроцессору (управляется директивами
#line
)
[править] Примечания
- ↑ Это директивы, определёные стандартом. Стандарт не определяет поведение для других директив: они могут быть проигнорированы, иметь какое-нибудь полезное значение или делать программу некорректной. Даже будучи проигнорированными, они удаляются из исходного кода после окончания работы препроцессора.