2

我最近开始重写一个程序以使其更易于理解,并且我开始使用枚举来描述我的程序可能处于的不同状态。

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

问题:我做错了什么,我怎样才能让我的代码工作?

4

2 回答 2

3

无符号字符将按预期工作。您有几个拼写错误或未定义的标签:

case Charge:但枚举正在充电

case DiagCharge1:但枚举是 DiagCharging1 等。

于 2015-09-23T17:54:50.087 回答
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)

如果您评论默认案例,那么您可以跟踪是否已实施每个案例语句。

于 2015-09-29T15:27:50.920 回答