C言語のdefineについて調べてみた。
結果をまとめると以下のとおり。
defineとは、プリプロセッサ指示のひとつで文字列を別の文字列に置き換えることができるもの。この機能はマクロ置換と呼ばれる。
使用例:
#define MAX 100
この定義以降のプログラムでは、コンパイル時にプリプロセッサによりMAXが100と変換されてからコンパイルされる。
このようなマクロ置換をオブジェクト形式マクロと呼ぶ。
プリプロセッサとは、コンパイル前の準備的な処理を行うソフトウェアのことである。
マクロ置換は引数を取ることもできる。
使用例:
#define RND(x) (rand()%(x+1))
このケースではRND(9)は0〜9までの乱数となる。
このようなマクロ置換を関数形式マクロと呼ぶ。
関数形式マクロは、引数の型が固定されない、関数呼び出し時のオーバヘッドがない等、関数よりも便利な面がある。
反面、マクロ使用時のパラメータでインクリメントやデクリメントを行うと、それが複数回行われるケースがある等、不具合を発生させる危険もある。そのため、関数形式マクロの使用には注意が必要である。
参考ページ:
C言語のdefineについて