-         

Ergebnis 1 bis 8 von 8

Thema: switch in Verbindung mit einer enum Variable

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    11.02.2005
    Beiträge
    30

    switch in Verbindung mit einer enum Variable

    Anzeige

    Hallo,

    folgendes Problem. In meinem Programm wird folgende Variable definiert
    typedef enum {
    NULL,
    EINS,
    ZWEI,
    } Zahlenreihe;
    volatile Zahlenreihe dummy;

    Im Hauptprogramm wird wird nun der Variablen dummy der Wert NULL zugewiesen.
    dummy = NULL;
    Anschließend erfolgt eine Auswertung mit Hilfe von switch.

    switch (dummy) {
    case NULL:
    case EINS:

    x = 5;
    case ZWEI:

    y = 2;
    }
    Mein Problem ist nun, dass obwohl die Variable dummy immer noch den Wert NULL besitzt, dass Programm trotzdem in case EINS hineinspringt (und dann auch in den case ZWEI). Dies habe ich im AVRStudio mit Hilfe der Variablenüberwachung auch gesehen.
    Habe ich da was bei dem switch-Befehl nicht richtig verstanden, oder bei enum?
    Habt schon mal vielen Dank für eure Hilfe.
    Gruß
    Stefan

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Die feinen Leute schreiben da "break" dazwischen. Ohne dem fährt der C da glatt durch. (Is nicht wie bei Bascom)
    Code:
    switch (dummy) 
    { 
    case NULL: 
       break;
    case EINS: 
       x = 5; 
       break;
    case ZWEI: 
       y = 2; 
       break;
    default:
       break;
    }
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.11.2003
    Ort
    Alfeld (50km südl. Hannover)
    Alter
    34
    Beiträge
    237
    Du musst nach jedem case noch ein break einfügen also:

    Code:
    case foo:
        blabla();
        break;
    case bar:
        blabla2();
        break;
    ohne das break rattert er den ganzen case block ab.

    edit: Mal wieder zu langsam
    Open Minds. Open Sources. Open Future

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    11.02.2005
    Beiträge
    30
    Hallo,

    das ist ja alles richtig, aber er soll ja auch die weiteren cases überprüfen, ob einer wahr ist und dann hineinspringen. Mein Problem ist jetzt, dass obwohl dummy den Wert NULL besitzt, das Programm trotzdem in case EINS reinspringt und ich das nicht verstehe..

    Nochmal vielen Dank

    Gruß
    Stefan

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Er springt ja nach NULL.
    Aber mangels "break" marschiert er gleich weiter zu EINS und dann auch gleich noch zu ZWEI.
    klaro ?

    EDIT: da bei NULL nix gemacht wird, schaut es im Debugger aus, als wär er gleich zu EINS gesprungen. Du hast ja einen Optimizer auch noch.
    Auf was sollte auch der Pfeil beim debugger hinzeigen ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    11.02.2005
    Beiträge
    30
    Hi,
    das ist richtig, aber warum führt er die Anweisung x=5 aus? Die steht doch im "case" EINS und sollte deshalb nicht ausgeführt werden..?

    Gruß

    Stefan

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.11.2003
    Ort
    Alfeld (50km südl. Hannover)
    Alter
    34
    Beiträge
    237
    Weil das break fehlt. Ohne das Fängt er bei NULL an und arbeitet sich nach unten durch. Ohne Break werden ALLE Anweisungen nach dem Einsprungpunkt dis zum Blockende ( } ) ausgeführt.
    Schreib deine Funktion mal so wie PicNick gepostet hat.

    Hier kannst du es nochmal genau nachlesen:
    http://www.pronix.de/pronix-686.html

    mfg
    Thorsten
    Open Minds. Open Sources. Open Future

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    11.02.2005
    Beiträge
    30
    hi,
    oh ja...alles klar.
    Vielen dank

    Gruß Stefan

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •