Препроцессор
Материал из 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)
[править] Примечания
- ↑ Это директивы, определёные стандартом. Стандарт не определяет поведение для других директив: они могут быть проигнорированы, иметь какое-нибудь полезное значение или делать программу некорректной. Даже будучи проигнорированными, они удаляются из исходного кода после окончания работы препроцессора.

