マクロ (C/C++)

プリプロセスではプリプロセッサ ディレクティブ (最初の空白文字として # がない行でないすべての行) と条件付きコンパイルの一部としてスキップされないあるディレクティブの一部のマクロを展開します。 「条件付きコンパイルの」ディレクティブはテキスト ブロックにコンパイラに渡されるテキスト ブロックがプリプロセス時にソース ファイルから削除されたかを判断するには定数式を識別子でテストしてソース ファイルのコンパイルを中止できるようにします。

#define のディレクティブでは定数と有効な識別子がキーワードおよび一般的に使用されるステートメントまたは式関連付けるために使用されます。定数を表す識別子は呼び出されます 「記号定数」または」と 「マニフェスト定数ステートメントまたは式を表す識別子が呼び出されます」。と 「マクロこのドキュメントではプリプロセッサの 「マクロ」という用語が使用されます。

マクロの名前はプログラムのソース テキストまたはそのほかの特定のプリプロセッサ コマンドの引数で認識されるとそのマクロの呼び出しとして扱われます。マクロ名はマクロの本体のコピーに置き換えられます。マクロが引数を受け取る場合はマクロ名の後の実引数はマクロの本体の仮パラメーターと置き換えられます。本体で処理されたコピーとマクロはを置き換えるプロセスはマクロは「配置」と呼ばれます。

つまりマクロの 2 種類があります。"オブジェクトと同様の」マクロは関数呼び出しの外観と動作するように 「引数を受け取るための関数と同様の」マクロを定義できる一方で引数を受け取りません。マクロは実際の関数呼び出しを生成しないためそのプログラムの実行をマクロと関数呼び出しを置き換えることによってもできます。(C++ にインライン関数は適切なメソッドです)。ただしマクロはで定義および使用する問題を作成できます。式の適切な優先順位を維持するには引数とマクロ定義はかっこを使用する必要があります。またマクロが正しく副作用の式を処理しない場合があります。詳細については#define のディレクティブ の getrandom の例を参照してください。

マクロを定義し別の値に元の定義を削除しない限りは再定義できません。ただし同じシグネチャを持つマクロを厳密に定義し直すことができます。したがって同じシグネチャはプログラム内で複数回使用できます。

#undef のディレクティブはマクロの定義を削除します。定義を削除する場合は別の値にマクロを定義し直すことができます。#define のディレクティブ#undef のディレクティブ は #define と #undef のディレクティブを個別について説明します。

詳細については、次のトピックを参照してください。

参照

その他の技術情報

C/C++ プリプロセッサの参照