考虑以下示例:
typedef enum {Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday} Day;
void DoSomething(Day day){
//some code
}
问题是以下代码符合:DoSomething(74)
。那么如何在DoSomething中查看我的参数真的是一天?
(依靠数字赢了,因为如果我改变我的枚举Sunday=7
....,我希望它也能工作,并且检查if(day==Sunday || day ==...)
看起来效率低下。)
答案 0 :(得分:5)
简短的回答是你不能。
答案很长,你可以尝试设置“最小”和“最大”成员,并检查该值是否介于两者之间...或其他类似的技巧。
答案 1 :(得分:1)
typedef enum {Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday, Last} Day;
void DoSomething(Day day){
// if day < Last ...
}
答案 2 :(得分:0)
您可以在DoSomething中添加switch语句。
switch(day){
case Day.Monday:
// something
break
...
default:
// ignore or something
答案 3 :(得分:0)
如果在代码中编写DoSomething(74)语句,现代编译器会生成警告,说DoSomething期望枚举但传递整数。
但是,如果您从用户输入传递一个值,其中任何值都可以传递给DoSomething(),那么您将不得不像其他建议一样小心。