enumを使うことのよい利点は別にもあります。それは、自動的に数値を決定してくれるか らです。例えば
enum TMyState {
msIdle,
msMenu,
msAction,
msDefault,
};int RunNowState( int state )
{
int result;switch( state ){
case msIdle:
&nb sp; :
break;
case msMenu:
&nb sp; :
break;
case msAction:
&nb sp; :
break;
case msDefault:
&nb sp; :
break;
}
return result;
}
のように数値が連続する場合は
#define FLAG_GO 0
#define FLAG_ACT 1
#define FLAG_NOT 2
#define FLAG_ADD 3
と書いても同じ意味になります。例え連続していなくても、 = XXX をつけることで、名前が 意味する値を直接設定することができます。
enum TFlag {
FLAG_GO,
FLAG_ACT,
FLAG_NOT,
FLAG_ADD,
};
面白いのは次のような使い方もできるという事です。
enum TFlag2 {
FLAG2_GO = 1,
FLAG2_ACT = 2,
FLAG2_NOT = 4,
FLAG2_ADD = 8,
};
追伸
/* #define を使った場合 */
#define IMAGE_HEADER_FORMAT 2000
#define IMAGE_HEADER_SCAN 2001
#define IMAGE_HEADER_TABLE 2002
#define IMAGE_HEADER_TABLE2 2003#define MUSIC_HEADER_FORMAT 3000
#define MUSIC_HEADER_SCAN 3001
#define MUSIC_HEADER_IO 3002
#define MUSIC_HEADER_SIGNAL 3003
/* enum を使った場合(上の例と同値) */
enum THeaderMarker {
IMAGE_HEADER_FORMAT = 2000,
IMAGE_HEADER_SCAN,
IMAGE_HEADER_TABLE,
IMAGE_HEADER_TABLE2,MUSIC_HEADER_FORMAT = 3000,
MUSIC_HEADER_SCAN,
MUSIC_HEADER_IO,
MUSIC_HEADER_SIGNAL,
};