25.1.1 定義の基本

これまで配列に文字列を読み込む際に十分な大きさの配列を用意したり、 あるいは fgets() などにおいて、用意した配列の大きさを指定したり する必要がある場合、配列の大きさは変数として与えることは出来ない ために数値を直接指定しなければならなかった。

    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)



最初のページ 戻る 次へ 最後のページ 目次
Hiroyasu Asami