Switch Case break

Hallo zusammen,

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

  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

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

Ich hab's befürchtet :~
Danke Gunther

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

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:

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
}

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

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

Ä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 :disappointed_relieved:

Aber ich habe noch andere Optimierungsmöglichkeiten 8)

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.

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

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

musst es halt mal mit einer Reihe von ifs vergleichen:

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 ...

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