Preprocessor
From cppreference.net
<
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(since C23) и#endif). -
замена
текстовых макросов с возможной конкатенацией или квотированием идентификаторов (управляется директивами
#defineи#undef, и операторами#и##) -
включение
других файлов (управляется директивой
#includeи проверяется с помощью__has_include(since C23) ) -
вызов
ошибки
или
предупреждения
(since C23)
(управляется директивой
#errorили#warningсоответственно (since C23) )
Следующие аспекты препроцессора могут быть контролируемы:
-
поведение, определяемое реализацией
(управляется директивой
#pragmaи оператором_Pragma(начиная с C99) ) -
информация о имени файла и номере строки
доступная препроцессору (управляется директивами
#line)
Сноски
- ↑ Это директивы, определенные стандартом. Стандарт не определяет поведение для других директив: они могут игнорироваться, иметь полезное значение или делать программу некорректной. Даже если они игнорируются, они удаляются из исходного кода после завершения работы препроцессора. Распространенным нестандартным расширением является директива #warning , которая выводит пользовательское сообщение во время компиляции. (до C23)
Пример
|
Этот раздел не завершён
Причина: отсутствует пример |
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
-
- 6.10 Директивы препроцессора (стр.: TBD)
- Стандарт 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 documentation
для
Predefined Macro Symbols
|
|
|
C documentation
для
Macro Symbol Index
|
|
|
C++ documentation
для
Preprocessor
|