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; }
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
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.
Du musst nach jedem case noch ein break einfügen also:
ohne das break rattert er den ganzen case block ab.Code:case foo: blabla(); break; case bar: blabla2(); break;
edit: Mal wieder zu langsam
Open Minds. Open Sources. Open Future
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
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.
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
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
hi,
oh ja...alles klar.
Vielen dank
Gruß Stefan
Lesezeichen