C言語のマクロ定義の利用規則は?
C 言語のマクロ定義を使用する際の規則は次のとおりです。
- #defineから始まり、マクロ名、マクロの置換テキストが続くマクロ定義。たとえば:#define MAX_NUM 100。
- マクロ名は、他の変数や識別子と区別しやすくするために、通常すべて大文字で記述されます。
- 展開されたマクロ名の後の置換用テキストは、任意のC言語の式または文であってよく、マクロ定義によりソースコードに直接置換され、型検査は行われません。
- マクロ定義では、引数を含めることができます。引数はマクロ名の後に括弧で囲み、カンマで区切ります。例:#define SQUARE(x) ((x) * (x))
- マクロのパラメータは、マクロの置換テキスト内でパラメータ名で参照することで使用できます。マクロが呼び出されると、実際のパラメータは対応する仮パラメータに置き換えられます。
- 宏定義では、__LINE__(現在のソースコード行番号)、__FILE__(現在のソースファイル名)などのマクロ事前定義済みシンボルを使用できます。
- 条件コンパイルディレクティブ(#ifdef、#ifndef、#endifなど)を使用して、条件に応じてマクロを定義または未定義にすることで、マクロ定義を柔軟に行えます。
- #undefを使用して定義済みのマクロの定義を解除できます。
- マクロ定義のスコープは、定義点からファイルの終わり、または #undef によって未定義にされる場所まで
- マクロ定義はネストして使用可能で、1つのマクロ定義は他の定義済みのマクロを使用できます。
- マクロ定義ではセミコロンを使用できません。なぜなら、マクロ定義は単なるテキスト置換だからです。
マクロ定義は単純なテキスト置換であり、引数や置換テキストの型チェックは行われないため、思わぬ不具合の原因になる可能性がある点に注意し、マクロ定義を使用する場合はこうした問題を避けるように注意すべきである。また、マクロ定義はプログラムの実行効率の向上に寄与する場合がある一方、コードの可読性の低下を招く可能性もあるため、マクロ定義の使用には注意が必要である。