Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается официальная грамматика препроцессора C и C++. Он охватывает синтаксис директив и операторов предварительной обработки. Дополнительные сведения см. в директивах Preprocessor и Pragma и _Pragma
__pragma
ключевых словах.
Общие сведения об определениях для грамматики
Терминальные слова — это конечные точки в определении синтаксиса. Никакое другое разрешение невозможно. Терминальные слова включают в себя набор зарезервированных ключевых слов и определенные пользователем идентификаторы.
Нетерминальные слова — это местозаполнители в синтаксисе. Большая их часть определена в других местах этой сводки синтаксиса. Определения могут быть рекурсивными. В разделе Лексических соглашений справочника по языку C++ определены следующие нетерминалы:
constant
, , constant-expression
keyword
identifier
operator
,punctuator
Необязательный компонент обозначается атрибутом opt в нижнем индексе. Например, следующий синтаксис указывает необязательное выражение, заключенное в фигурные скобки:
{
необ.expression
}
Соглашения о документах
В соглашениях используются разные атрибуты шрифтов для различных компонентов синтаксиса. Ниже перечислены символы и шрифты.
Атрибут | Description |
---|---|
nonterminal |
Курсивом выделяются нетерминальные символы. |
#include |
Терминальные символы, выделенные жирным шрифтом, представляют литеральные зарезервированные слова и символы, которые должны вводиться, как показано. В знаках в этом контексте всегда учитывается регистр. |
необ. | Нетерминальные символы, за которыми следует атрибут opt, всегда являются необязательными. |
Шрифт по умолчанию | Знаки в наборе, описанные или перечисленные в этом шрифте, можно использовать в качестве терминальных символов в операторах. |
Двоеточие (:
) после нетерминального вводит его определение. Альтернативные определения перечисляются в отдельных строках.
В блоках синтаксиса кода эти символы в шрифте по умолчанию имеют особое значение:
Символ | Description |
---|---|
[ ] | Квадратные скобки окружают необязательный элемент. |
{ | } | Фигурные скобки окружают альтернативные элементы, разделенные вертикальными полосами. |
... | Указывает, что предыдущий шаблон элемента может повторяться. |
В блоках синтаксиса кода запятые (,
), запятые (), точки (.
), точки с запятыми (:
;
), двоеточия (), круглые скобки (), двойные кавычки (( )
"
) и одинарные кавычки ('
) — литералы.
Грамматика препроцессора
control-line
:
#define
identifier
token-string
необ.
#define
identifier
(
identifier
opt ,
... ,
identifier
opt opt opt )
token-string
#include
"
path-spec
"
#include
<
path-spec
>
#line
digit-sequence
"
filename
"
необ.
#undef
identifier
#error
token-string
#pragma
token-string
constant-expression
:
defined(
identifier
)
defined
identifier
любое другое константное выражение
conditional
:
if-part
elif-parts
необ. else-part
необ. endif-line
if-part
:
if-line
text
if-line
:
#if
constant-expression
#ifdef
identifier
#ifndef
identifier
elif-parts
:
elif-line
text
elif-parts
elif-line
text
elif-line
:
#elif
constant-expression
else-part
:
else-line
text
else-line
:
#else
endif-line
:
#endif
digit-sequence
:
digit
digit-sequence
digit
digit
: один из
0
1
2
3
4
5
6
7
8
9
token-string
:
Строка token
token
:
keyword
identifier
constant
operator
punctuator
filename
:
Юридическое имя файла операционной системы
path-spec
:
Допустимый путь к файлу
text
:
Любая последовательность текста
Примечание.
В разделе "Лексические соглашения" справочника по языку C++ развернуты следующие нетерминалы: constant
, , constant-expression
, identifier
keyword
и operator
punctuator
.