在函数中使用枚举和切换(C18 编译器)
Using enums and switch in functions (C18 Compiler)
我最近开始重写一个程序以使其更易于理解,并且我开始使用枚举来描述我的程序可能处于的不同状态。
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
问题:我哪里做错了,我怎样才能让我的代码正常工作?
无符号字符将按预期工作。您有几个拼写错误或未定义的标签:
case Charge:
但枚举正在充电
case DiagCharge1:
但枚举是 DiagCharging1,等等
你也可以试试这个:
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)
并且如果您对 default 案例进行评论,那么无论您是否实施了每个案例陈述,您都可以跟踪它。
我最近开始重写一个程序以使其更易于理解,并且我开始使用枚举来描述我的程序可能处于的不同状态。
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
问题:我哪里做错了,我怎样才能让我的代码正常工作?
无符号字符将按预期工作。您有几个拼写错误或未定义的标签:
case Charge:
但枚举正在充电
case DiagCharge1:
但枚举是 DiagCharging1,等等
你也可以试试这个:
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)
并且如果您对 default 案例进行评论,那么无论您是否实施了每个案例陈述,您都可以跟踪它。