enum tagSData { tagInt, tagDouble, tagSymbol, tagComposite};これで、tagInt, tagDouble, tagSymbol, tagCompositeに別々の整数値(0,1,2,3)が 割り振ることができます。利用する側は、
typedef enum tagSData { tagInt, tagDouble, tagSymbol, tagComposite } tagSData_t; /* これも型名をつけておきましょう。実体は整数だけど */ /* tagSData という identifier は使わない場合省略可能。 */ void foo(tagSData_t pp) { switch(pp) { case tagInt: /* Int の時の仕事 */ break; case tagDouble: /* Double の時の仕事 */ break; case tagSymbol: /* Symbol の時の仕事 */ break; case tagComposite: /* Composite の時の仕事 */ break; default: exit(1); } }これで、プログラムがなにをやっているかが分かりやすいでしょう。 数字だったらどこかで書き間違えたらそれで終りだし。
定数に名前をつける方法には、#define var 3 とかする方法もあります。 このあたりは、好みの問題でしょうね。
あと、ちょっとしたテクニックを紹介しておくと、tag の総数を求めるために、
typedef enum tagSData { tagInt, tagDouble, tagSymbol, tagComposite, tagSDataMax } tagSData_t;と書いておくと、tagSDataMax が(これ以外の) tag の総数(=4)を示してくれます。
2001.11.20/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp