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;
}

みたいなのも普通にできます。

/home/users/2/deca.jp-mice/web/cgi/dokuwiki/data/pages/enumを活用する.txt · 最終更新: 2010/09/12 23:34 by member
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0