Pages: [1]   Go Down
Author Topic: Switch Case break  (Read 248 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
God Member
*****
Karma: 12
Posts: 570
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo zusammen,

ich habe da ein Verständnisproblem zum Switch/Case Beispiel aus der Reference.

Code:
  switch (var) {
    case 1:
      //do something when var equals 1
      break;
    case 2:
      //do something when var equals 2
      break;
    default:
      // if nothing else matches, do the default
      // default is optional
  }

Es steht geschrieben: Without a break statement, the switch statement will continue executing the following expressions ("falling-through") until a break, or the end of the switch statement is reached.

Jetzt nehmen wir mal an, ich schmeiße die Breaks raus und var ist 1.
Also werden die folgenden case-Anweisungen zwar durchlaufen, da sie aber nicht zutreffen wird auch nichts weiter gemacht.

Ist das korrekt so?

Danke
Klaus
Logged

Offline Offline
Edison Member
*
Karma: 38
Posts: 1152
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nein,
ohne Break führt er alle Anweisungen aus, die nach dem Einsprungpunkt kommen.
Logged

Grüße
Gunther

Offline Offline
God Member
*****
Karma: 12
Posts: 570
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich hab's befürchtet  smiley-confuse
Danke Gunther
Logged

Offline Offline
Sr. Member
****
Karma: 7
Posts: 359
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wieso befürchtet.
Erklär mal was daran schlimm ist....
gruß
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 56
Posts: 2973
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Erklär mal was daran schlimm ist....
Schlimm ist, dass der Compiler nicht meckert wenns fehlt, und dass gute Programmierer das "feature" nicht benutzen.
Oder, wenn überhaupt, dann so was schreiben:
Code:
switch (test)
{
case 2:
   // 2 heisst : beide Testfunktionen 1 und 2
    test_2();

  // hier absichtlich kein break !;
case 1:
  test_1();
  break;
case 3;
  ...
  break;
default:
  ...
  break; // this break is redundant, but good style
}
Logged

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 248
Posts: 21167
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Es ist ja eben nicht falsch wenn man bei 2 Werten der Switchvariablen das gleiche machen willst.

Code:
switch (test)
{
  case 2:
  case 1:
  macht irgendwas.
  break;

  case 3;
  ...
  break;
}
Hier will man bei test = 0 und bei test = 1 das gleiche machen. So mußt Du es nicht 2 mal schreiben.
Grüße Uwe

Logged

Offline Offline
God Member
*****
Karma: 12
Posts: 570
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ähh, bei mir geht's um so was triviales wie Speicher. Mein ATtiny13 ist ausgereizt und ich dachte ich könnte durch weggelassene breaks was sparen. Kann ich auch, aber leider auch die damit verbundene Funktionalität  smiley-sad-blue

Aber ich habe noch andere Optimierungsmöglichkeiten  smiley-cool
Logged

Offline Offline
Faraday Member
**
Karma: 96
Posts: 3500
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dann solltest du mal nachlesen wie switch/case in Assembler aussieht. Das sind i.d.R. vorberechnete Sprung-Tabellen. Das break ist dabei entweder ein return oder ein absoluter Sprung zu Ende (wodurch der restlich Code eben ausgeführt wird wenn es fehlt). Effizienter geht es kaum.
Logged

Offline Offline
God Member
*****
Karma: 12
Posts: 570
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dann solltest du mal nachlesen wie switch/case in Assembler aussieht.

Hmm, ob mir das wirklich was bringt ... aber trotzdem danke.
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 56
Posts: 2973
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

musst es halt mal mit einer Reihe von ifs vergleichen:

Code:
if ( test <=2 && test >=1 )  IrgendwasBei1oder2();
else if (test==3) Aktion3();
else { /* die default aktion */ }
Das sollte etwa Uwes Beispiel entsprechen.
Wenn du 10 cases zu einem Fall und 10 andere zu einem anderen zusammenfasst, wird das mit if  eventuell günstiger.
Bei 10 verschiedenen Aktionen wirds mit 10 breaks wohl besser als mit 10 if Abfragen ...
« Last Edit: February 14, 2014, 12:23:47 pm by michael_x » Logged

Offline Offline
God Member
*****
Karma: 12
Posts: 570
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Alles klar, ich hab jetzt den Durchblick - danke an alle!
Logged

Pages: [1]   Go Up
Jump to: