申报"未设置"的正确方法枚举值

时间:2014-06-13 15:03:37

标签: c enums initialization

如果使用无法改变内容的枚举,例如

typedef enum {
  sun=0,
  mon=1,
  tue=2,
  wed=3,
  thu=4,
  fri=5,
  sat=6,
} days;

有没有办法安全地拥有一些看起来像的代码:

days day;

day = /*what goes here*/;

if (somecondition)
{
  day = sun;
}
else if (othercondition)
{
  day = mon;
}

if (day != /*what goes here*/)
{
  use(day);
}

除了创建另一个哨兵,显示那天已经确定并且不依赖于知道日期枚举的内容?

1 个答案:

答案 0 :(得分:3)

在类似的编码中,我尝试将第一个枚举(0)保留为" NULL"值:

typedef enum { 
  nullday = 0,
  sun=1,
  mon=2,
  tue=3,
  wed=4,
  thu=5,
  fri=6, 
  sat=7,
} days;

这允许“非白天”。天:

days day;

day = nullday;

if (somecondition)
{
  day = sun;
}
else if (othercondition)
{
  day = mon;
}

if (day != nullday)
{
  use(day);
}

代码的另一个版本:

typedef enum {nullday=0, sun, mon,tue,wed,thu,fri,sat} days;

...

days day = nullday;

if (somecondition)
{
  day = sun;
}
else if (othercondition)
{
  day = mon;
}

if (day)
{
  use(day);
}