我最近开始重写一个程序,使其更容易理解,我开始使用枚举来描述我的程序可以处于的不同状态。
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
问题:我做错了什么,我怎样才能使我的代码正常工作?
答案 0 :(得分:3)
无符号字符将按预期工作。您有几个拼写错误或未定义的标签:
case Charge:
但枚举是充电
case DiagCharge1:
但枚举是DiagCharging1等。
答案 1 :(得分:1)
你也可以尝试一下:
typedef enum
{
Idle,
Charging,
Done,
DiagCharging1,
DiagBattery,
DiagCharging2,
DiagDone,
Error
} ProgState;
byte VoltageLimit(ProgState xMyProgState, word voltage)
{
switch(xMyProgState){
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;
*/
}
}
它会给你这样的具体错误:
Build error: 'Charge' undeclared (first use in this function)
如果您对默认案例发表评论,那么您可以跟踪是否已实施每个案例陈述。