#define(C++)
マクロの定義と定義解除:インデックス への移動
構文
#define macro_identifier <token_sequence> #define macro_identifier(<arg_list>) <token_sequence>
説明
#define 指令は、マクロを定義します。マクロは、トークン置換のメカニズムを提供します。関数のパラメータに似た、一連の仮パラメータを使用する場合と使用しない場合があります。
ソース コードの中でこの制御行の後に出現する macro_identifier
は、それぞれ元の位置で、空もあり得る token_sequence
に置換されます(いくつか例外がありますが、後述します)。このような置換を、マクロ展開といいます。token_sequence
は、マクロの本体と呼ばれることもあります。
空の token_sequence
は、影響を受ける macro_identifier
それぞれをソース コードから削除することになります。
それぞれのマクロが個別に展開された後に、展開済みの新しいテキストがさらに検索されます。これによりマクロのネストが可能になります。展開済みのテキストに、置換の対象となるマクロ識別子が含まれている可能性があるからです。ただし、マクロがプリプロセッサ指令に見えるものに展開されても、プリプロセッサはその指令を認識しません。マクロ展開には、次のような制限があります。
- ソース コード内のリテラル文字列、文字定数、およびコメントに出現する
macro_identifier
はすべて、展開されません。 - マクロは、自身の展開中は展開されません(このため、
#define A A
は永遠に展開されません)。
例
#define HI "Have a nice day!" #define empty #define NIL "" #define GETSTD #include <stdio.h>
2 つ目の構文を使用すると、引数付きマクロ(関数のようなマクロ)を作成できます。