#define


目次に戻る


今日も関数の紹介ではありません。#defineはマクロを定義する為につかいます。
 
C言語でいうマクロが何かというと、ある文字列をコンパイル時に別の文字列に置き 換えるという動作をします。言葉ではわからないので、例をあげます。
 
以下の二つのプログラムは同じです。
/* プログラム1 */
for( i=0 ; i<10 ; i++ ){
    :
    :
}

/* プログラム2 */
#define    DATA_MAX    10

for( i=0 ; i<DATA_MAX ; i++ ){
    :
    :
}

プログラム2では、事前に DATA_MAXは10に置き換えるべし とマクロ定義してあるので、 コンパイラはDATA_MAXを10と認識してコンパイルしてくれるのです。
 
上記のプログラム1のように10等の定数をプログラム中にそのまま書くと、後でその ソースを読んだ人(自分自身も含める)が「この10という数字はいったい何だろう」と首を 傾げてしまいます。ところが、マクロ定義でDATA_MAXのようにかいてあれば「なるほど、 ここのループは全データに対して処理を行うのだな」と納得できるわけです。
 
しかし、悲しいことに頭でわかっていても途中で面倒くさくなって定数を直接ゴリゴリと 書いてしまいがちです。そこで、「プログラム中に数字は一度も出さない」と心に決めてプ ログラムを書いてください。今は面倒くさくても、数字をダイレクトに書くと後で後悔します。
/* 後悔したプログラムの例 */
switch( chara->vector ){    /* キャラクタの今の向きにあわせて処 理が異なる */
    case 0:
        :
        :
        break;
    case 1:
        :
        break;
    case 2:
        :
        :
        break;
    case 3:
        :
        :
        break;
}

switch( nowstate ){    /* 現在の状態にあわせて画面に出力する 画像が変わる */
    case 0:
        :
        break;
    case 1:
        :
        :
        break;
    case 2:
        :
        :
        break;
    case 3:
        :
        :
        break;
    case 4:
        :
        break;
}

if( flag == 3 ){
    flag = 14;
} else if( flag >= 10 && flag < 14 ){
    exec_battle();
}

さっぱりわからないですね。はい。


目次に戻る