Einzelnen Beitrag anzeigen

mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#21

AW: switch, break, case c++

  Alt 27. Aug 2017, 10:52
Code:
   case 'a' :
       { 
       // Declaration of szChEntered OK. Local scope.
       char szChEntered[] = "Character entered was: ";


       cout << szChEntered << "a\n";
       } 
       break;
 
   case 'b' :
       // Value of szChEntered undefined.
       cout << szChEntered << "b\n";
       break;
 
   default:
       // Value of szChEntered undefined.
       cout << szChEntered << "neither a nor b\n";
       break;
   }
"einmal klammer nach Case einmal keine..
welcher sinn steckt dahinter."...


=> Der Sinn von Klammern ist also, das es innerhalb derer möglich ist, neue lokal gültige Variablen zu definieren
=> wenn keine Variablen definiert werden, braucht es beim "Case" oder "Default" keine geschweiften Klammern
=> das "Break" ist kein "End" im Sinne einer schließenden Klammer... man kann auch mehrere Breaks innerhalb eines "Case" oder "Default" verwenden
-> beim "Break" vor oder nach der letzten schließenden geschweiften Klammer gibt es nur einen Unterschied. Hält man per Debugger da an, sind innerhalb der Klammern die lokalen Variablen noch gültig und prüfbar, nach der schließenden Klammer sind die davor innerhalb der Klammern angelegten Variablen ungültig und nicht mehr zugreifbar...
- dem "switch" ist die Position eines beliebigen "breaks" innerhalb der "switch"-Klammern egal, das "break" ist nix weiter wie ein "goto EndOfSwitch;"


Die Syntax ist durchaus eindeutig...
- im "case" MUSS man bei Verwendung von lokalen Variablen Klammern verwenden
- für den "switch" ist die Position der "breaks" völlig egal... das erste was zur Ausführung kommt macht ein "GotoEndOfSwich" (ohne "break" geht es also auch, denn so schreibt man in "C" das was man in Delphi mit Komma getrennen Werten macht:
Code:
switch(x)
{
  case 0:
       x=-1;
       break;

  case 1:
  case 2:
  case 3:
       y=x*3;
       break;

  case 4:
  case 5:
  case 6:
       y=x*5;
       break;

  default:
       y=-1;
       break;
}

Geändert von mensch72 (27. Aug 2017 um 11:01 Uhr)
  Mit Zitat antworten Zitat