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 に答える