Препроцессор
Материал из cppreference.com
< c
Препроцессор работает на 4-м этапе трансляции перед компиляцией. В результате появляется единый файл, который затем передаётся компилятору.
Директивы
Директивы препроцессора управляют его поведением. Каждая директива занимает одну строку и имеет следующий формат:
- Символ
# - инструкция препроцессора (одна из
define,undef,include,if,ifdef,ifndef,else,elif,elifdef,elifndef(начиная с C23),endif,line,embed(начиная с C23),error,warning(начиная с C23),pragma) [1] - аргументы (в зависимости от инструкции)
- перевод строки
Допускается пустая директива (# и перевод строки), которая не имеет эффекта.
Возможности
Препроцессор имеет следующие возможности по трансляции исходного файла:
- условная компиляция частей исходного файла (управляется директивами
#if,#ifdef,#ifndef,#else,#elif,#elifdef,#elifndef(начиная с C23) и#endif). - замена текстовых макросов с возможностью соединения или цитирования идентификаторов (управляется директивами
#defineи#undef, и операторами#и##) - включение других файлов (управляется директивой
#include) - порождение ошибки или предупреждения (начиная с C23) (управляется директивами
#errorили#warningсоответственно (начиная с C23))
Можно управлять следующими составляющими препроцессора:
- определяемое реализацией поведение (управляется директивой
#pragmaи оператором_Pragma(начиная с C99)) - имя файла и информация о строке доступны препроцессору (управляется директивой
#line)
Примечания
- ↑ Это определённые стандартом директивы. Стандарт не определяет поведение других директив: они могут игнорироваться, иметь некоторое полезное значение или сделать программу плохо структурированной. Даже если иное игнорируется, оно удаляется из исходного кода после окончания работы препроцессора. Часто встречающееся нестандартное расширение — это директива
#warning, которая генерирует заданное пользователем сообщение во время компиляции. (до C23)
Ссылки
- Стандарт C17 (ISO/IEC 9899:2018):
- 6.10 Директивы препроцессора (стр. 117-129)
- Стандарт C11 (ISO/IEC 9899:2011):
- 6.10 Директивы препроцессора (стр. 160-178)
- Стандарт C99 (ISO/IEC 9899:1999):
- 6.10 Директивы препроцессора (стр. 145-162)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
- 3.8 ДИРЕКТИВЫ ПРЕПРОЦЕССОРА
См. также
Документация C++ по препроцессору
|