Недавно я начал переписывать программу, чтобы сделать ее более понятной, и начал использовать перечисления для описания различных состояний, в которых может находиться моя программа.
byte VoltageLimit(byte progState, word voltage)
{
switch(progState){
case Charge:
case DiagCharge1:
case DiagCharge2:
if(voltage>ConstUMax)
{return 1;}
else
{return 0;}
case Diagnose:
if(voltage<ConstUMin)
{return 1;}
else
{return 0;}
default:
return 0;
}
}
Вот перечисление:
enum EnumProgramState
{
Idle,
Charging,
Done,
DiagCharging1,
DiagBattery,
DiagCharging2,
DiagDone,
Error
}
Я думал, что смогу передать его как байт в функцию, поскольку значения на самом деле являются целыми числами, но я не уверен, вызывает ли это проблему или что-то еще, я уже давно модифицирую эту функцию.
Ошибка, которую я получаю при компиляции (2 ошибки в одной строке), ошибка появляется всегда на первой строке, которую я пишу в конкретном случае. Я понятия не имею, что оно пытается мне сказать.
main.c:159:Error [1113] integer constant expected for case label value
main.c:159:Error [1113] integer constant expected for case label value
Вопрос: что я делаю не так, как мне заставить мой код работать?
byte
вместоprogState
в сигнатуре функции, но объявите его типомenum EnumProgramState
— это поможет передать назначение параметра. (Вы также можете рассмотреть возможность повторного объявления перечисления как чего-то вродеtypedef enum {...} ProgramState
, чтобы вы могли опуститьenum
в таких объявлениях). Точно так же, если ваш возвращаемый тип является логическим, сделайте егоBOOL
или что-то в этом роде вместоbyte
, чтобы цель использования была более ясной. Эти изменения дадут вам:BOOL VoltageLimit(ProgramState progState, word voltage)
- person paul   schedule 23.09.2015