この記事では、C および C++ プリプロセッサの正式な文法について説明します。 プリプロセス ディレクティブと演算子の構文について説明します。 詳細については、プリプロセッサと pragma ディレクティブ、および __pragma キーワードと_Pragma キーワードを参照してください。
文法の概要での定義
終端は構文定義内のエンドポイントです。 他の解決はありません。 終端には、予約語およびユーザー定義の識別子が含まれます。
非終端は構文内のプレースホルダーです。 ほとんどは、この構文概要の他の場所で定義されています。 定義は再帰的に行うことができます。 次の非終端は、C++ 言語リファレンスの「構文規則」での項で定義されます。
constant、 constant-expression、 identifier、 keyword、 operator、 punctuator
省略可能な構成要素には添字 opt を付けます。 たとえば、次の構文では、省略可能な式が中かっこで囲まれています。
{optexpression }
ドキュメントの表記規則
構文規則では、構文のコンポーネントごとに異なるフォント属性を使用します。 シンボルとフォントは次のとおりです。
| 属性 | 説明 |
|---|---|
nonterminal |
斜体は、非終端要素を示します。 |
#include |
太字で示される終端要素は、示されたとおりに入力する必要があるリテラル予約語およびシンボルです。 このコンテキストの文字は、常に大文字と小文字が区別されます。 |
| opt | 後ろに opt が続く非終端要素は、常に省略可能です。 |
| 既定のタイプフェイス | このタイプフェイスで記述されているか、示されているセット内の文字は、ステートメント内で終端要素として使用できます。 |
非終端要素に続くコロン ( : ) は、定義の説明を示します。 代替定義は別の行に示されます。
コード構文ブロックでは、既定の書体のこれらのシンボルには特別な意味があります。
| Symbol | 説明 |
|---|---|
| [ ] | 角かっこは、省略可能な要素を囲みます。 |
| { | } | 中かっこは、縦棒で区切られた別の要素を囲みます。 |
| ... | 前の要素パターンを繰り返すことができることを示します。 |
コード構文ブロックでは、コンマ (,)、ピリオド (.)、セミコロン (;)、コロン (:)、かっこ (( ))、二重引用符 (")、単一引用 (') はリテラルです。
プリプロセッサの文法
control-line:
#define identifier token-stringopt
#defineidentifier ( identifieropt , ... , identifieropt ) token-stringopt
#include "path-spec"
#include <path-spec>
#line digit-sequence "filename"opt
#undef identifier
#error token-string
#pragma token-string
constant-expression:
defined( identifier )
defined identifier
その他の定数式
conditional:
if-part elif-partsopt else-partopt 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:
テキストの任意のシーケンス
Note
次の非終端は、C++ 言語リファレンス: constant、constant-expression、identifier、keyword、operator、punctuator の「構文規則」の項で拡大されます。