Switch Case: Konstanten verwenden möglich?

Gast #1043338
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
}
Gast
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.