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