【发布时间】:2015-09-23 16:54:47
【问题描述】:
我最近开始重写一个程序以使其更易于理解,并且我开始使用枚举来描述我的程序可能处于的不同状态。
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)