Forum: Compiler & IDEs Switch Case: Konstanten verwenden möglich?


von Benno K. (Gast)


Lesenswert?

Hallo,
ich habe eine Switch Case Anweisung in meinem Programm wobei es für 
jeden Möglichen Wert eine globale Konstante (uint8_t) gibt. Verwende ich 
aber bei den Cases die Konstantennamen, dann meckert der Compiler: 
"error: case label does not reduce to an integer constant"

Muss ich jetzt direkt 0, 1, 2 etc. benutzen oder gibt es eine 
Möglichkeit die Konstanten doch zu verwenden?

zur Verdeutlichung meines Problems:
1
const uint8_t rot = 0;
2
const uint8_t blau = 1;
3
...
4
...
5
int main(void){
6
...
7
   switch (Farbe){
8
      case rot:{
9
      ...
10
      break;
11
      }
12
      case blau:{
13
      ...
14
      break;
15
      }
16
   }
17
}

von Matthias L. (Gast)


Lesenswert?

Ich definiere diese Konstanten immer mit define.
Das geht super.

von yalu (Gast)


Lesenswert?

In C sind mit const qualifizierte Variablen zwar write-only, aber
keine Konstanten. In C++ ist das anders, da würde der Code
funktionieren.

In C macht man das entweder wie Matthias mit Defines
1
#define ROT  0
2
#define BLAU 1

oder mit Enums
1
enum Farbe { ROT, BLAU };

In beiden Fällen sind ROT und BLAU aus Compilersicht Konstanten mit den
Werten 0 und 1.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du kannst die symbolischen Namen eines enum verwenden:
1
enum farben = { rot, blau, gruen, gelb };
2
3
enum farben farbe;
4
5
switch (farbe)
6
{
7
  case rot:
8
    // irgendwas
9
    break;
10
11
  case gruen:
12
    // wasanderes
13
    break;
14
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.