いくつかの方法があります。よりクリーンな解決策は、整数値が増加することが保証されている列挙子を使用することです。
typedef enum Difficulty {
Easy,
Normal,
Hard,
Lunatic
} Difficulty;
これは次のように使用できます。
void foo(Difficulty a, Difficulty b)
{
if (a > b) {
// ...
} else
// ...
}
// ...
Difficulty a = Easy;
Difficulty b = Hard;
foo(a, b);
他のアプローチも可能です。値を増やしてマクロを使用できます。
#define EASY 0
#define NORMAL 1
#define HARD 2
#define LUNATIC 3
現在のアプローチも機能しますが、定数に実際の文字を使用する理由はありません。代わりに数値を使用できます。
const char EASY = 0;
const char NORMAL = 1;
const char HARD = 2;
const char LUNATIC = 3;
もちろん、私が見る限り、char
定数を使用する必要がある本当の理由はありません。代わりに使用できますint
。
最初のアプローチ (列挙子を使用する) は、使用できる実際の typedef を提供するため、通常は好まれます。これにより、コードが少し読みやすくなります。type の変数が表示された場合Difficulty
、保持することが期待される値の種類がすぐにわかります。
列挙子について留意すべきことの 1 つは、列挙子が整数と互換性があるということです。つまり、それらには任意の数値を割り当てることができるため、型の安全性は実際には提供されません。それは主に、型の安全性ではなく、よりクリーンなコードを書くことです。