如何在C中安全地使用枚举?

时间:2014-04-04 09:42:18

标签: c enums

考虑以下示例:

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 ==...)看起来效率低下。)

4 个答案:

答案 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(),那么您将不得不像其他建议一样小心。