======enumを活用する======
=====enumとは=====
enumは、列挙型という型を作ります。
記法としては、
typedef enum{
rekkyo_1,
rekkyo_2,
rekkyo_3,
}t_rekkyo; //型を作る
t_rekkyo r1,r2; //t_rekkyo 形のr1 r2 という変数を作る
という感じで、列挙型の型の宣言と、変数の宣言ができます。
また、列挙されたメンバーに数字を当てはめておく事もできます。
typedef enum{
false = 0,
true = 1,
}t_boolean;
t_boolean flag1, flag2;
こんな感じです。
当然、上のt_boolean 型の変数flag1, flag2が宣言された状態で
flag1 = true;
flag2 = flag1;
とすれば、flag2にはtrueが入ります。
内部的には数字なので当然、
if(flag1){
//flag1が立っていた時の処理
}else{
//flag1が立っていなかった時の処理
}
という書き方ができます。
ただし、読みやすいように
if(flag1 == true){
}else{
}
と書いた方が良いでしょう。
=====使い道=====
true,falseをメンバーにしてフラグ用に使うのが、一番多いと思いますが、本来の使い方ではありません。
例えばマイクロマウスで、今の状態を示す変数をつくろうと思った時に、
int state = 0;
/*
0 : 人の手で操作中(メニュー)
1 : 探索中
2 : 最短走行中
3 : クラッシュ
*/
なんて風にやっていた所を、
typedef enum{
menu, //メニュー操作
search, //探索
fast_run, //最短走行
crash, //ぶつかった
}t_machine_state;
t_machine_state state;
みたいに書く事ができます。
見やすいプログラムにすることでバグの発生を抑えるのが、enumの正しい使い方です。
menuの項目なんかも、列挙型で管理するとやりやすいと思います。
分かっているとは思いますが、
switch(state){
case menu:
//・・・・
break;
case search:
//・・・・
break;
case fast_run:
//・・・・
break;
case crash:
//・・・・
break;
}
みたいなのも普通にできます。