char buf[512]; ... fgets(fp, 512, buf); |
このような場合に、大きさ 512 を間違えたりすると最悪メモリを破壊 してしまう。そこで、こうした言わば定数を名前で定義する事が出来れば 間違いも減るであろうし、値を変更しなければならないような場合にも 定義を変更するだけで良くなるので便利である。
このような変数ではなく、単なる文字の置き換え機能がプリプロセッサ には用意されている。
#define 記号定数名 値 |
ここで、文の終りには ;
は必要ない。何故ならば、この文は
コンパイルされる以前にプリプロセッサによって処理され、実際に
コンパイルされる時にはコンパイラーから見れば存在しない文である
からである。つまり、この #define
はエディタで置き換えを
実行しているのと同じような効果を持っているのである。
先の例でこの機能を使うには、
#define BSIZE 512 ... char buf[BSIZE]; ... fgets(fp, BSIZE, buf); |
のようにすれば良い。こうした機能は標準ヘッダーでも使われており、 例えば EOF (End Of File)定数は、stdio.h の中で次のように定義 されている。
#define EOF (-1) |