#undef
マクロの定義と定義解除:インデックス への移動
構文
#undef macro_identifier
説明
#undef 指令を使用すると、マクロの定義を解除できます。 #undef は、マクロ識別子から以前のトークン シーケンスをすべて切り離します。これにより、そのマクロ定義は取り消され、マクロ識別子の定義が解除されます。 #undef 行では、マクロは展開されません。
定義中か未定義なのかの状態は、実際の定義にかかわらず、識別子の重要なプロパティになります。 任意の識別子が現在定義されているかどうかをテストするのに使用される条件指令 #ifdef および #ifndef は、コンパイルをさまざまな側面から制御するための柔軟性の高いメカニズムです。
マクロ識別子の定義を解除した後、#define を使用してそれを再定義できます。トークン シーケンスは、同じものでも別のものでも使用できます。
既に定義済みのマクロ識別子を再定義しようとすると、新しい定義が既存の定義とトークンごとにまったく同じでも、警告が発生します。 定義が他のヘッダー ファイルに存在する可能性がある場合は、次の方法を推奨します。
#ifndef BLOCK_SIZE #define BLOCK_SIZE 512 #endif
BLOCK_SIZE
が現在定義されている場合、中の行はバイパスされます。BLOCK_SIZE
が現在定義されていない場合、中の行が有効になってそれを定義します。
プリプロセッサ指令を終了させるのに、セミコロン(;)は必要ありません。 セミコロンも含めて、トークン シーケンス中の文字はすべて、マクロ展開時に出現します。 トークン シーケンスは、バックスラッシュで終端されていない最初の改行が検出されたときに終了します。 トークン シーケンス中のコメントを含む、連続した空白は、スペース文字 1 つに置換されます。