#c #enums #initialization
#c #перечисления #инициализация
Вопрос:
При использовании перечисления, для которого вы не можете изменить содержимое, например,
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) в качестве значения «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);
}
Комментарии:
1. Я бы начал с
-1
» неопределенного дня «. Остерегайтесь, что программисты начинают считать0
. 😉