変数と演算子
define
定数の説明にも出てきましたが、「define」についてもう少し掘り下げてみます。一般的にdefineが使用される場合には「#define」とプリプロッセッサとして記述します。これは、コンパイル時のプログラムを実行する前に、定義された内容で置き換えるということを行なうためです。
#define MAX_LENGTH 256
定数のように単純な置き換えはこのように記述します。プログラム中に「MAX_LENGTH」という記述が現れると、それは「256」に置き換えられてプログラムは実行されます。これを利用する理由としては、マジックナンバーの使用を防ぐことと、あとからプログラムを見た人が値の意味を理解しやすいことが挙げられます。
突然プログラムに「256」と表れても意味は分かりませんが、「MAX_LENGTH」と書いてあれば何かの最長を示すということが分かります。
#define TRIANGLE(base,height) (base) * (height) / 2
上記のようなものを関数マクロと言います。今回の例では下辺と高さを引数として、三角形の面積が返却されるマクロとなっています。関数の引数のようにマクロへ引数を渡し、計算した結果がプログラム内で使用されます。
total = TRIANGLE(10,8);
プログラム内ではこのように記述し、変数totalには「40」が代入されることになります。
「(base) * (height) / 2」という記述に違和感を覚える方もおられるかとおみますが、プログラム内から「TRIANGLE(10+5,8)」と呼び出された場合に、()がないと「10+5*8/2」と展開されてしまい、乗除算から先に計算されてしまうため正しい結果が得られなくなります。マクロの定義時には文末の「;(セミコロン)」が不要であることに注意しましょう。